栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JavaScript 如何访问.then()链中的先前的诺言结果?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaScript 如何访问.then()链中的先前的诺言结果?

ECMAscript和声

当然,语言设计者也意识到了这个问题。他们做了很多工作,异步函数提案最终使它成为了

ECMAscript 8

您不再需要单个

then
调用或回调函数,因为在异步函数(被调用时返回一个Promise)中,您只需等待Promise直接解析即可。它还具有诸如条件,循环和try-
catch-clauses之类的任意控制结构,但是为了方便起见,我们在这里不需要它们:

async function getExample() {    var resultA = await promiseA(…);    // some processing    var resultB = await promiseB(…);    // more processing    return // something using both resultA and resultB}

ECMAscript 6

在等待ES8时,我们已经使用了非常相似的语法。ES6带有生成器功能,该功能允许按任意放置的yield关键字将执行分段。这些切片可以相互独立,甚至异步地运行-这就是我们要在执行下一步之前等待promise解析时所要做的。

有专用的库(例如co或task.js),但是还有许多Promise库具有辅助函数(Q,Bluebird,when …),当您为它们提供生成器函数时,它们会为您逐步执行异步操作产生希望。

var getExample = Promise.coroutine(function* () {//    ^^^^^^^^^^^^^^^^^ Bluebird syntax    var resultA = yield promiseA(…);    // some processing    var resultB = yield promiseB(…);    // more processing    return // something using both resultA and resultB});

从4.0版开始,它确实在Node.js中起作用,而且一些浏览器(或其开发版本)相对较早地支持生成器语法。

ECMAscript 5

但是,如果您希望/需要向后兼容,那么在没有编译器的情况下不能使用它们。当前工具支持生成器功能和异步功能,例如,请参见Babel有关生成器和异步功能的文档。

然后,还有许多其他 专门用于简化异步编程的可编译为JS的语言。他们通常使用类似语法await(例如冰的Coffeescript),但也有其他人配备了哈斯克尔样do-notation(如LatteJs,一元,Purescript或Lispyscript)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/379288.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号