这是我的示例代码。如何摆脱中间的承诺链
协调员首先调用了几个输入的工作人员,一旦得到响应,就必须验证响应是否令人满意。
如果满意,只需返回给调用者。
如果不是,再次调用同一个工人或者可能是不同的工人,输入略有不同,并按照流程。
在这里,虽然,我的代码调用CB()的第一个工人电话后,它也将第二则和错误进行“响应”未定义等。
我可以添加额外的条件检查第一个响应是否令人满意,就像need2ndworkercall & &然后在第二个验证(响应)然后摆脱它。但想知道处理这个问题的正确方法是什么。欣赏任何反馈。
function orchestrateSomething(input, cb){
doSomething(input.a, input.b)
.then(response=>{
if(validate(response)){
cb(buildResultObj(response));
}
else{
return doSomething(input.a)
}
})
.then(response=>{
if(validate(response)){
cb(buildResultObj(response));
}
else{
cb(null,{});
}
})
.catch(error=>cb(error));
}
你的Wi如果你想有条件地执行链的某个部分,你会想创建分支而不是直链。搜索“承诺分支与链”,你会发现许多文章(一些在stackoverflow)解释。 – jfriend00
请参阅[multiple,sequential fetch()Promise](http://stackoverflow.com/questions/38034574/multiple-sequential-fetch-promise/) – guest271314