有很多方法可以解决这个问题,但基本上你必须改变链条结构或功能本身。
在这种情况下,我会敷getLighterfluid
有这样的帮手:
function conditionally(predicate, handler) {
return function(val) {
if(predicate(val) {
return handler(val);
}
};
}
function notEqualFunc(val) {
return function(v) {
return v != val;
};
}
getMoney()
.then(getBeer)
.then(getFireworks)
.then(conditionally(notEqualFunc('No fireworks available'), getLighterfluid))
.then(getCrazy);
,你可以:
getMoney()
.then(getBeer)
.then(getFireworks)
.then(function(val) { if(val != 'No fireworks available') return getLighterfluid(val); })
.then(getCrazy);
如果你需要经常使用它你可以概括这种模式创建您需要的任何谓词原型而不是notEqualFunc
,并使代码具有相当的描述性。
'getLighterFluid'只能检查是否有烟花。如果没有,什么都不要做。 – Oskar
'.catch(getAmbulance)' – Bergi