什么是异步编程,异步编程问题如何处理
Admin 2022-10-31 群英技术资讯 1275 次浏览
今天这篇我们来学习和了解“什么是异步编程,异步编程问题如何处理”,下文的讲解详细,步骤过程清晰,对大家进一步学习和理解“什么是异步编程,异步编程问题如何处理”有一定的帮助。有这方面学习需要的朋友就继续往下看吧!含义:
有异步肯定会有同步
凡是回调函数存在的,都是异步代码
先执行同步代码,看到异步代码后,将异步代码放到异步代码执行区(先不执行)
继续执行同步代码,当所有的同步代码执行结束后,在执行异步代码
异步代码案例:
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()
到此,关于“什么是异步编程,异步编程问题如何处理”的学习就结束了,希望能够解决大家的疑惑,另外大家动手实践也很重要,对大家加深理解和学习很有帮助。如果想要学习更多的相关知识,欢迎关注群英网络,小编每天都会给大家分享实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
node.js导致进程退出是什么原因?NodeJS进程推出的因素通常是主动退出、未捕获的异常、未处理的 promise rejection、未处理的 Event Emitter error 事件和系统信号这三种,接下来我们详细了解看看。
这篇文章主要介绍了详解在node.js中require方法的加载规则,本文一步步解析了require加载规则,讲述了核心的模块,路径形式的模块,第三方模块等,需要的朋友可以参考下
这篇文章主要为大家详细介绍了jquery实现全选功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
vue实现动态样式的方法有哪些?vue中我们想要实现动态样式的方法有很多,因此本文给大家分享几个vue实现动态样式实例供大家参考,对新手学习和理解vue实现动态样式有一定的帮助,接下来跟随小编来学习一下吧。
小程序文件预览怎样实现,用什么方法?在实际项目的操作过程或是学习过程中,不少人都会遇到这样的问题,接下来就让小编带大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008