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

ES6 Promises-在Promise链中调用同步函数

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

ES6 Promises-在Promise链中调用同步函数

在一个Promise链中,调用同步函数是否是错误的做法?

不,这根本不是一个坏习惯。这是许多预期和有用的实践之一。

您可以完全自由地(在

.then()
处理程序中)调用promise链中的同步函数或异步函数,然后再返回新的promise。

当您从

.then()
处理程序中返回某些内容时,您可以返回一个值(它将成为父承诺的已解决值),也可以返回另一个承诺(将其链接到前一个承诺上),也可以抛出类似于返回被拒绝的承诺的工作(承诺链被拒绝)。

因此,这意味着您可以调用同步函数并从中获取值,或者调用异步函数并获得另一个诺言,然后从

.then()
处理程序中返回。

所有这些同步事物都是完全合法的,并且每个都有其自己的目标。这是

.then()
处理程序中的一些同步事件:

// modify resolved valuesomeAsync().then(function(val) {    return val + 12;});// modify resolved value by calling some synchronous function to process itsomeAsync().then(function(val) {    return someSynchronousFunction(val);});// synchronously check the value and throw to change the promise chain// to rejectedsomeAsync().then(function(val) {    if (val < 0) {        throw new Error("value can't be less than zero");    }    return val;});// synchronously check the value and return a rejected promise // to change the promise chain to rejectedsomeAsync().then(function(val) {    if (val < 0) {        return Promise.reject("value can't be less than zero");    }    return val;});

这是一个异步操作的小示例,该操作返回一个promise,之后是三个同步

.then()
处理程序,然后输出最终值:

function delay(t, val) {    return new Promise(function(resolve) {        setTimeout(function() { resolve(val);        }, t);    });}function increment5(val) {    return val + 5;}delay(500, 10).then(increment5).then(function(val) {    return val - 3;}).then(function(final) {    document.write(final);});

注意:通常,您仅在有或可能有异步操作时才希望使用Promise,因为如果一切都是同步的,那么纯同步代码既执行起来更快,编写起来也更容易。但是,如果您已经至少有一个异步操作,则可以将同步操作与该异步操作混合使用,并使用诺言来帮助构建代码。



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

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

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