为什么当promise链有错误时它不会执行。除非.then引用带参数的外部方法?
所以这个例子我故意在promise链中抛出一个错误。前三个。然后没有像预期的那样开火。但是,最后一个带有参数的方法会触发。为什么?然后.catch正如预期的那样发射。
var Promise = require('bluebird');
var testVar = 'foo';
errorOnPurpose()
.then(function() {
console.log('This will not fire, as expected');
})
.then(function(testVar) {
console.log('This also will not fire, as expected');
})
.then(testMethod1)
.then(testMethod2(testVar))
.catch(function(error) {
console.log('Error:::', error, ' , as expected');
});
function errorOnPurpose() {
return new Promise(function(resolve, reject) {
return reject('This promise returns a rejection');
});
}
function testMethod1() {
console.log('This one will not fire either, as expected');
}
function testMethod2(foo) {
console.log('This will fire!!!!, ARE YOU KIDDING ME!! WHY??');
}
控制台中的结果:
This will fire!!!!, ARE YOU KIDDING ME!! WHY??
Error::: This promise returns a rejection , as expected
答案 0 :(得分:2)
.then(testMethod2(testVar))
在这个方法中你没有传递testMethod2函数,你传递它的响应(因为在Javascript中你通过编写funcName(funcParam)
来调用函数)
用一些参数传递函数你必须像这样调用它:
.then(testMethod2.bind(this, testVar))
答案 1 :(得分:1)
这与承诺无关。
您正在立即调用该方法:testMethod2(testVar)
然后,您将该方法调用的返回值传递给then
。