打破承诺链
Breaking up promise chain
为什么它们不等价,有没有办法让它们等价?
// Returns result of promiseB
var p = self.promiseA()
.then(self.promiseB);
return p;
// Returns result of promiseA
var p = self.promiseA();
p.then(self.promiseB);
return p;
例如,如果我想做类似的事情:
var p = self.promiseA();
if(cond) {
p.then(self.promiseB);
}
return p;
第一个 return 是一个组合承诺(只有当 promiseA 已解决且 promiseB 已 运行 时才会解决)。
在第一种情况下,p
是 运行ning self.promiseA().then();
的结果,这是一个超越 self.promiseA()
return 的新承诺。
第二个 returns 只是第一个承诺,它只是 self.promiseA()
returns.
有一件事在 .then()
中并不总是很明显,我们会在 运行 之前的承诺实现后才想到它,但事实并非如此。整个 .then()
链立即 运行。函数指针被存储起来供以后调用(当 promises 被履行时),但是整个链 运行 立即并且每次调用 .then()
都会创建一个新的 promise,其履行时间和结果可能与链中的前一个(这取决于每个 .then()
回调在被调用时执行的操作)。
所以 self.promiseA()
与 self.promiseA.then(xxx)
return 不是一回事。后者是一个新的承诺,它结合了第一个承诺和 运行 宁 .then()
处理程序的结果。
如果你想做你的条件,你可以这样做:
var p = self.promiseA();
if(cond) {
p = p.then(self.promiseB);
}
return p;
如果您尝试 return 累积或合并的承诺,那么您需要 return p.then()
的结果,而不仅仅是 p
。
为什么它们不等价,有没有办法让它们等价?
// Returns result of promiseB
var p = self.promiseA()
.then(self.promiseB);
return p;
// Returns result of promiseA
var p = self.promiseA();
p.then(self.promiseB);
return p;
例如,如果我想做类似的事情:
var p = self.promiseA();
if(cond) {
p.then(self.promiseB);
}
return p;
第一个 return 是一个组合承诺(只有当 promiseA 已解决且 promiseB 已 运行 时才会解决)。
在第一种情况下,p
是 运行ning self.promiseA().then();
的结果,这是一个超越 self.promiseA()
return 的新承诺。
第二个 returns 只是第一个承诺,它只是 self.promiseA()
returns.
有一件事在 .then()
中并不总是很明显,我们会在 运行 之前的承诺实现后才想到它,但事实并非如此。整个 .then()
链立即 运行。函数指针被存储起来供以后调用(当 promises 被履行时),但是整个链 运行 立即并且每次调用 .then()
都会创建一个新的 promise,其履行时间和结果可能与链中的前一个(这取决于每个 .then()
回调在被调用时执行的操作)。
所以 self.promiseA()
与 self.promiseA.then(xxx)
return 不是一回事。后者是一个新的承诺,它结合了第一个承诺和 运行 宁 .then()
处理程序的结果。
如果你想做你的条件,你可以这样做:
var p = self.promiseA();
if(cond) {
p = p.then(self.promiseB);
}
return p;
如果您尝试 return 累积或合并的承诺,那么您需要 return p.then()
的结果,而不仅仅是 p
。