node 异步,nodejs原理和特点
首先理解什么是异步编程
含义:
有异步就一定有同步。
任何存在的回调函数都是异步代码。
首先执行同步代码。看到异步代码,就把异步代码放到异步代码执行区(不要先执行)。
继续执行同步代码,当所有同步代码完成后,执行异步代码。
异步代码案例:
console . log(“1”);
setTimeout(()={
Console.log(在2秒内执行.);
},2000);
console . log( end );程序执行后的输出结果:
一个
仁慈
2秒后执行…
总结:代码会在执行中会依次执行,但执行到回调函数,就会把回调函数放入异步代码执行区,先不执行,如果代码执行完后,再去依次执行放入异步代码执行区。
同步代码行案例:
for(设I=0;i10i ){
console.log(一);
}
console . log( end );程序执行后的输出结果:
0123456789
结束总结:同步代码,for循环无论执行多久,下面代码都要等待它执行完毕后才会执行。
2.为什么有异步编程
nodejs的特点是单线程、异步、非阻塞。如果代码逻辑涉及多次回调,就会出现非常可怕的代码,不利于后期维护。
异步编程的作用是提高效率。现在程序越来越大,CPU和内存的压力也越来越大。需要异步编程,因为它允许计算机同时处理多个事务。
3.如何处理异步编程出现的问题
在我们的项目中,会出现一些问题,比如因为异步编程,导致值未定义。
解决方案:回调函数嵌套,Promise,await,async语法sugar变为同步。
现在文件夹里有三个txt文件,1,2,3。我们需要阅读这三个文件。如果第一次直接读,第二次可能顺序就乱了,所以需要处理异步的问题,让它们按顺序执行。
使用回调函数嵌套代码:
const fs=require(fs )
const path=require(path )
让p1=path.join(1.txt )
让p2=path.join(2.txt )
让p3=path.join(3.txt )
fs.readFile(p1, utf8 ,(err,data)={
如果(错误)抛出错误
console.log(数据)
fs.readFile(p2, utf8 ,(err,data)={
如果(错误)抛出错误
console.log(数据)
fs.readFile(p3, utf8 ,(err,data)={
如果(错误)抛出错误
console.log(数据)
})
})
})使用承诺代码:
NewPromise的作用:让异步代码立即执行。
const fs=require(fs )
函数readFile(路径){
返回新承诺((解决,拒绝)={
fs.readFile(路径, utf8 ,(err,data)={
解析(数据)
})
})
}
让p1=readFile(1.txt )
让p2=readFile(2.txt )
让p3=readFile(3.txt )
p1.then(结果={
console.log(结果)
返回p2
}).然后(结果={
console.log(结果)
返回p3
}).然后(结果={
console.log(结果)
返回p3
})也可以使用await,async语法sugar代码:
const path=require(path )
const fs=require(fs )
让p1=readFile(1.txt )
让p2=readFile(2.txt )
让p3=readFile(3.txt )
var readfile=(路径)={
返回新承诺((解决,拒绝)={
fs.readFile(路径, utf8 ,(err,data)={
解析(数据)
})
})
}
异步函数exec() {
等待读取文件(p1)。然后(result=console.log(result))
等待读取文件(p2)。然后(result=console.log(result))
等待读取文件(p3)。然后(result=console.log(result))
}
Exec()【推荐:node.js视频教程】
以上是深入理解NodeJs异步编程含义的详细内容。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。