【问题标题】:Javascript return Promise from function - promise chain vs variable [duplicate]Javascript从函数返回Promise - 承诺链与变量[重复]
【发布时间】:2017-03-11 06:15:06
【问题描述】:

这两种从函数返回promise的方式有区别吗

var promise;
promise = callAsync();
promise.then(doSomething).then(doSomethingElse);
return promise;

var promise;
promise = callAsync();
return promise.then(doSomething).then(doSomethingElse);

我认为这两种方法是相同的,但在 mocha 测试用例中,只有第二种方法有效。

【问题讨论】:

  • 只有第二种方法是正确的,第一种方法只返回 callAsync 承诺
  • @JaromandaX 由 callAsync() 发起的承诺不会在这两种情况下都创建承诺链吗?
  • 如果是这样,那我就错了。但我没有错:p

标签: javascript promise mocha.js


【解决方案1】:

它们当然不一样。每个 .then() 返回一个新的承诺。所以,

return promise;

正在返回原始承诺,但是:

return promise.then(doSomething).then(doSomethingElse);

正在返回一个新的 Promise,它是调用两个 .then() 方法的结果。不同之处在于后者返回一个受.then() 方法中调用的函数影响的promise,而第一个promise 仅受callAsync() 影响,与其他.then() 处理程序无关。

第一个承诺只监控callAsync()。它与其他 .then() 处理程序中发生的事情完全无关。理解.then() 的关键在于它返回一个新的promise,而这个新的promise 会受到.then() 处理程序中发生的事情的影响。

有关更多信息,请阅读此答案:Is there a difference between promise.then.then vs promise.then; promise.then 以了解链接和分支之间的区别。

【讨论】:

    猜你喜欢
    • 2020-08-26
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    相关资源
    最近更新 更多