从功能
返回承诺的这两种方式之间是否存在差异?var promise;
promise = callAsync();
promise.then(doSomething).then(doSomethingElse);
return promise;
VS
var promise;
promise = callAsync();
return promise.then(doSomething).then(doSomethingElse);
我认为两种方法都是相同的,但在摩卡测试案例中,只有第二种方法可行。
答案 0 :(得分:4)
他们当然不一样。每个.then()
都会返回一个新的承诺。所以,
return promise;
正在返回原始承诺,但是:
return promise.then(doSomething).then(doSomethingElse);
返回一个新的promise,它是调用两个.then()
方法的结果。不同之处在于后者正在返回受这些.then()
方法中调用的函数影响的promise,而第一个promise只受callAsync()
的影响而与其他.then()
无关。 1}}处理程序。
第一个承诺只是监控callAsync()
。它与其他.then()
处理程序中发生的事情完全无关。理解.then()
的关键在于它返回一个新的承诺,这是受.then()
处理程序中发生的事情影响的新承诺。
有关详细信息,请阅读以下答案:Is there a difference between promise.then.then vs promise.then; promise.then以了解链接和分支之间的区别。