当前位置: 首页 > 后端技术 > Node.js

Node.jsPromise异步学习

时间:2023-04-03 20:42:35 Node.js

Promise简单理解我的理解是promise是一种将异步处理转换为同步处理的解决方案,可以通过下面的代码来理解。不返回结果的Promisevarsleep=function(index){setTimeout(()=>{//模拟异步处理console.log(`sleep${index}`)},500*index);}varfn=功能(){console.log('开始')睡眠(1);//这里是异步处理函数console.log('end')}fn()我们期望结果是startsleep1end但是因为sleep是异步处理的(延迟n秒后),所以最终执行结果是startendsleep`现在使用Promise转换,将sleep函数返回一个Promise,然后使用then方法调用Promise对象。varsleep=function(index){returnnewPromise(function(resolve,reject){setTimeout(()=>{console.log(`sleep${index}`)resolve()},500*index);})}varfn=function(){console.log('start')sleep(1).then(()=>{console.log('end')});}fn()程序执行结果与预期一致结果。返回结果的PromiseResolve可以带一些参数,在then中可以访问到,所以返回的结果可以通过resolve返回。varsleep=function(index){returnnewPromise(function(resolve,reject){setTimeout(()=>{constresult=`sleep${index}`resolve(result)},500*index);})}varfn=function(){console.log('start')sleep(1).then((info)=>{console.log(info)console.log('end')});}fn()函数执行结果与预期结果一致。使用await而不是then方法await意味着阻塞,并且await必须放在一个用async修饰的函数中,比如下面的形式:使用等待。varsleep=function(index){returnnewPromise(function(resolve,reject){setTimeout(()=>{constresult=`sleep${index}`resolve(result)},500*index);})}varfn=asyncfunction(){console.log('start')constinfo=awaitsleep(1)console.log(info)console.log('end')}fn()