日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

async/await工作机制探究--NodeJS

發(fā)布時(shí)間:2025/7/14 javascript 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 async/await工作机制探究--NodeJS 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

ES6中的async/await讓Promise變得更加簡(jiǎn)便,通常await處理的鏈?zhǔn)絇romise會(huì)包裹在函數(shù)中,返回結(jié)果仍然是一個(gè)Promise對(duì)象。

但是當(dāng)await直接處理鏈?zhǔn)絇romise時(shí),編譯器是會(huì)返回一個(gè)Promise對(duì)象等待下次await,還是繼續(xù)執(zhí)行Promise對(duì)象直到返回結(jié)果不再是Promise?

?

測(cè)試環(huán)境

NodeJS v8.7.0

?

測(cè)試代碼

1 const util = require('util'); 2 3 const prom2 = util.promisify((a, b, cb) => { 4 cb(null, a + b); 5 }); 6 7 function promiseCal(a, b) { 8 return prom2(a, b) 9 .then((val) => { 10 console.log(`value in first then: ${val}`); 11 return val * 2; 12 }) 13 .then((val) => { 14 console.log(`Value in second then: ${val}`); 15 return val * 3 16 }); 17 } 18 19 async function test() { 20 // await getting value from chained promise 21 let val1 = await promiseCal(2, 4); 22 23 console.log(`Typeof val1: ${typeof val1}\nFinal returned value: ${val1}`); 24 25 // await getting value from another form 26 console.log(`[v2] Type of prom2: ${typeof prom2}`); 27 let val2 = await prom2(4, 6) 28 .then((val) => { 29 console.log(`[v2] Value in first then: ${val}`); 30 return val * 2; 31 }) 32 .then((val) => { 33 console.log(`[v2] Value in second then: ${val}`); 34 return val * 3 35 }); 36 console.log(`[v2] Typeof val2: ${typeof val2}\n[v2] Final returned value: ${val2}`); 37 } 38 39 test() 40 .catch(e => console.error(e.stack || e));

?

運(yùn)行結(jié)果

value in first then: 6 Value in second then: 12 Typeof val1: number Final returned value: 36 [v2] Type of prom2: function [v2] Value in first then: 10 [v2] Value in second then: 20 [v2] Typeof val2: number [v2] Final returned value: 60

?

結(jié)論

await操作符會(huì)沿著Promise鏈處理到返回結(jié)果不再是Promise位置,await語(yǔ)句返回的將是Primise鏈上最后一個(gè)then函數(shù)的返回值(或者拋出異常)。

?

轉(zhuǎn)載于:https://www.cnblogs.com/harelion/p/9128674.html

總結(jié)

以上是生活随笔為你收集整理的async/await工作机制探究--NodeJS的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。