加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

什么是异步编程 异步编程问题如何解决

发布时间:2023-09-22 12:37:12 所属栏目:语言 来源:
导读:今天这篇我们来学习和了解“什么是异步编程,异步编程问题如何处理”,下文的讲解详细,步骤过程清晰,对大家进一步学习和理解“什么是异步编程,异步编程问题如何处理”有一定的帮助。有这方面

今天这篇我们来学习和了解“什么是异步编程,异步编程问题如何处理”,下文的讲解详细,步骤过程清晰,对大家进一步学习和理解“什么是异步编程,异步编程问题如何处理”有一定的帮助。有这方面学习需要的朋友就继续往下看吧!

首先理解什么是异步编程

含义:

有异步肯定会有同步

凡是回调函数存在的,都是异步代码

先执行同步代码,看到异步代码后,将异步代码放到异步代码执行区(先不执行)

继续执行同步代码,当所有的同步代码执行结束后,在执行异步代码

异步代码案例:

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

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()

到此,关于“什么是异步编程,异步编程问题如何处理”的学习就结束了,希望能够解决大家的疑惑,另外大家动手实践也很重要,对大家加深理解和学习很有帮助。

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章