分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

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

发布时间:2023-09-06 01:57责任编辑:苏小强关键词:Node

ES6中的async/await让Promise变得更加简便,通常await处理的链式Promise会包裹在函数中,返回结果仍然是一个Promise对象。

但是当await直接处理链式Promise时,编译器是会返回一个Promise对象等待下次await,还是继续执行Promise对象直到返回结果不再是Promise?

测试环境

NodeJS v8.7.0

测试代码

 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 * 316 ????????});17 }18 19 async function test() {20 ????// await getting value from chained promise21 ????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 form26 ????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 * 335 ????????});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));

运行结果

value in first then: 6Value in second then: 12Typeof val1: numberFinal 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

结论

await操作符会沿着Promise链处理到返回结果不再是Promise位置,await语句返回的将是Primise链上最后一个then函数的返回值(或者抛出异常)。

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

原文地址:https://www.cnblogs.com/harelion/p/9128674.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved