直接代码
return new Promise(function(resolve,reject){
PromiseA().then(function(dataA){
if (dataA)
return resolve()
else
return PromiseB()
}).then(function(dataB){
console.log(dataB)
})
})
本以为是dataA处应该跳出这个promise,但是即使在dataAreturn之后 dataB处仍然可以执行. 有没有直接跳出的方式?
目前写法
return new Promise(function(resolve,reject){
PromiseA().then(function(dataA){
if (dataA)
throw resolve()
else
return PromiseB()
}).then(function(dataB){
console.log(dataB)
})
})
8 回复
@lonso 你的写法有问题。
第一步 剥去外面那层Promise
return PromiseA().then(function(dataA){
if (dataA)
throw resolve()
else
return PromiseB()
}).then(function(dataB){
console.log(dataB)
})
第二步 参考下面的代码更改你的catch逻辑
var Promise = require("bluebird");
//等同于promiseA
var promiseA = Promise.try(function(){return 'dataA'});
//等同于 PromiseA().then
var promiseB = promiseA.cancellable()
.then(function(dataA){
if(dataA === 'dataA'){
return promiseA.cancel("dataA");
}else{
return 'never reach here'
}
}).then(function(data){
return data;
})
//通过ErrorType来区别对待异常
promiseB.then(console.log)
.catch(Promise.CancellationError,function(e){
console.log(e);
})
.catch(function(e){
console.log('other error')
})
还有一种:
var Promise = require("bluebird");
//等同于promiseA
var promiseA = Promise.try(function(){return 'dataA'});
//等同于 PromiseA().then
var promiseB = promiseA.cancellable()
.then(function(dataA){
if(dataA === 'dataA'){
throw 'dataA'
}else{
return 'never reach here'
}
}).then(function(data){
console.log('should not printed')
return data;
}).catch(function(e){
if(e === 'dataA')
return 'still resolve PromiseB'
else
throw e;
})
//通过ErrorType来区别对待异常
promiseB.then(console.log)
.catch(function(e){
console.log('catch error')
});