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

使用async-await处理异步

时间:2023-04-03 15:28:59 Node.js

前言最近通过jest-puppeteerE2E测试用例,使用async/await实现异步操作,模拟用户操作。async/await现已标准化,是时候学习它了。async的用法作为关键字放在函数前面,表示函数是异步函数,因为async是异步的意思,异步函数是指函数的执行不会阻塞后面代码的执行。写一个异步函数asyncfunctiontimeout(){return'helloworld'}timeout();console.log('虽然落后了,但我会先执行');打开浏览器控制台,我们可以看到Promise对象的异步函数返回的是一个promise对象。如果我们想获取promise的返回值,应该使用then方法asyncfunctiontimeout(){return'helloworld'}timeout().then(result=>{console.log(result);})console.log('虽然落后了,但我会先执行');控制台如下:我们得到了helloworld,timeout的执行并没有阻塞后面代码的执行,这和刚才说的是一致的。抛出错误如果在函数内部抛出错误,promise对象有一个catch方法来捕获错误。timeout(false).catch(err=>{console.log(err)})await的用法await是等待的意思,那么它在等什么,后面又是什么?事实上,任何表达式都可以放在它后面,但我们更可能放一个返回promise对象的表达式。请注意,await关键字只能放在异步函数中。现在编写一个返回promise对象的函数。该函数的作用是2s后将数值乘以2。2s后,返回doubleAfter2seconds(num){returnnewPromise((resolve,reject)=>{setTimeout(()=>{resolve(2*num)},2000);})}现在再写一个async函数,这样就可以使用await关键字,放在await后面是一个返回promise对象的表达式,所以后面可以调用doubleAfter2seconds函数asyncfunctiontestResult(){letresult=awaitdoubleAfter2seconds(30);控制台日志(结果);}测试结果();打开控制台,2s后,可以看到输出了60。