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

ES6 Promises-在Promise链中调用同步函数,第1张

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,因为如果一切都是同步的,那么纯同步代码既执行起来更快,编写起来也更容易。但是,如果您已经至少有一个异步 *** 作,则可以将同步 *** 作与该异步 *** 作混合使用,并使用诺言来帮助构建代码。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5476927.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-12
下一篇2022-12-12

发表评论

登录后才能评论

评论列表(0条)

    保存