本文小编为大家详细介绍“NodeJs异步编程的含义是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“NodeJs异步编程的含义是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
含义:
有异步肯定会有同步
凡是回调函数存在的,都是异步代码
先执行同步代码,看到异步代码后,将异步代码放到异步代码执行区(先不执行)
继续执行同步代码,当所有的同步代码执行结束后,在执行异步代码
异步代码案例:
console.log('1'); setTimeout(()=>{ console.log('2秒后再执行...'); },2000); console.log('end');
程序执行完毕后的输出结果:
1
恩德
2秒后再执行…
总结:代码会在执行中会依次执行,但执行到回调函数,就会把回调函数放入异步代码执行区,先不执行,如果代码执行完后,再去依次执行放入异步代码执行区。
同步代码行案例:
for(let i=0;i<10;i++){ console.log(i); } console.log('end');
程序执行完毕后的输出结果:
0123456789
end
总结:同步代码,for循环无论执行多久,下面代码都要等待它执行完毕后才会执行。
nodejs 特点是单线程、异步、非阻塞,如果代码逻辑涉及到多个回调,就会出现非常可怕的代码,不利于后期的维护。
而异步编程的作用就是提高效率,现在对程序越来越大,CPU和内存对压力也越来越大,异步可以让电脑同时处理多个事务,所以需要异步编程。
在我们项目当中,会出现一些问题,比如,拿不到值,是undefined,是因为异步编程。
解决方案:回调函数嵌套、 Promise、 await、async语法糖 变成同步
现在文件夹里有1,2,3三个txt文件,我们需要读取这三个文件,如果直接读取第一遍可能顺序对第二遍就会出现顺序混乱的情况,所以我们需要处理异步的问题,让他按顺序执行
使用回调函数嵌套代码:
const fs=require('fs') const path =require('path') let p1=path.join('1.txt') let p2=path.join('2.txt') let p3=path.join('3.txt') fs.readFile(p1,'utf8',(err,data)=>{ if(err) throw err console.log(data) fs.readFile(p2,'utf8',(err,data)=>{ if(err) throw err console.log(data) fs.readFile(p3,'utf8',(err,data)=>{ if(err) throw err console.log(data) }) }) })
使用Promise代码:
// new promise 的作用:让异步代码马上执行 const fs=require('fs') function readFile(path){ return new Promise((resolve,reject)=>{ fs.readFile(path,'utf8',(err,data)=>{ resolve(data) }) }) } let p1=readFile('1.txt') let p2=readFile('2.txt') let p3=readFile('3.txt') p1.then(result=>{ console.log(result) return p2 }).then(result=>{ console.log(result) return p3 }).then(result=>{ console.log(result) return p3 })
还可以使用 await、async语法糖 代码:
const path=require('path') const fs=require('fs') let p1=readFile('1.txt') let p2=readFile('2.txt') let p3=readFile('3.txt') var readfile=(path)=>{ return new Promise((resolve,reject)=>{ fs.readFile(path,'utf8',(err,data)=>{ resolve(data) }) }) } async function exec() { await readfile(p1).then(result => console.log(result)) await readfile(p2).then(result => console.log(result)) await readfile(p3).then(result => console.log(result)) } exec()
读到这里,这篇“NodeJs异步编程的含义是什么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。