if( condition1 ) {
    return promise1(param).then(promiseFinal);
else if( condition2 ) {
    return promise2(param).then(promiseFinal);
else if( condition3 ) {
    return promise3(param).then(promiseFinal);
else...


有什么方法可以运行promiseFinal而不需要多次指定它?我尝试的方法不起作用:

return void function(param){
    if( condition1 ) {
        return promise1(param);
    } else if( condition2 ) {
        return promise2(param)
    }...
}().then(promiseFinal)


此代码似乎会导致分支,并且与网络相关的承诺会无序执行。我敢肯定有办法做到这一点,但是我现在什么都没想到。

最佳答案

删除void运算符和您未传递任何内容的函数表达式的param参数。同样,如果没有条件匹配,您也不要忘记总是返回一个Promise,因为返回undefined会导致异常。

return (function() {
    if (condition1)
        return promise1(param);
    else if (condition2)
        return promise2(param);
    else if (condition3)
        return promise3(param);
    else
        Promise.reject(new Error("nothing matched"))
}()).then(promiseFinal);


为此,使用IEFE是一种很好的方法。一个替代方案可能是三元运算符:

return (condition1
  ? promise1(param)
  : condition2
      ? promise2(param)
      : condition3
          ? promise3(param)
          : Promise.reject(new Error("nothing matched"))
).then(promiseFinal);

关于javascript - 像最终的if语句后执行promise,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32673842/

10-11 12:16