深入理解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循环无论执行多久,下面代码都要等待它执行完毕后才会执行。

豆包AI编程 豆包AI编程

豆包推出的AI编程助手

豆包AI编程 483 查看详情 豆包AI编程

2.为什么有异步编程

nodejs 特点是单线程、异步、非阻塞,如果代码逻辑涉及到多个回调,就会出现非常可怕的代码,不利于后期的维护。

而异步编程的作用就是提高效率,现在对程序越来越大,CPU和内存对压力也越来越大,异步可以让电脑同时处理多个事务,所以需要异步编程。

3.如何处理异步编程出现的问题

在我们项目当中,会出现一些问题,比如,拿不到值,是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()

【推荐:node.js视频教程】

以上就是深入理解NodeJs异步编程的含义的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/546850.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月9日 18:07:39
下一篇 2025年11月9日 18:08:18

相关推荐

发表回复

登录后才能评论
关注微信