什么是异步编程,异步编程问题如何处理
Admin 2022-10-31 群英技术资讯 1178 次浏览
今天这篇我们来学习和了解“什么是异步编程,异步编程问题如何处理”,下文的讲解详细,步骤过程清晰,对大家进一步学习和理解“什么是异步编程,异步编程问题如何处理”有一定的帮助。有这方面学习需要的朋友就继续往下看吧!含义:
有异步肯定会有同步
凡是回调函数存在的,都是异步代码
先执行同步代码,看到异步代码后,将异步代码放到异步代码执行区(先不执行)
继续执行同步代码,当所有的同步代码执行结束后,在执行异步代码
异步代码案例:
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是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。Node.js的每一个API都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发。Node.js基本上所有的事件机制都是用设计模式中观察者模式实现。Node.js单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就
这篇文章主要为大家介绍了vue路由跳转的方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
vue的防抖和节流是什么意思?一些朋友可能对防抖和节流不是很了解,对此这篇文章就给大家具体的介绍一下什么是防抖和节流,感兴趣的朋友接下来跟随小编一起学习一下吧。
这篇文章主要介绍了React SSR 之限流,React SSR 毕竟涉及到了服务端,有很多服务端特有的问题需要考虑,而限流就是其中之一,本文会通过一个简单的案例来说明,为什么服务端需要进行限流,需要的朋友可以参考下
这篇文章主要给大家介绍了关于Nest.js散列与加密的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
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