在promises链中有if-else条件

时间:2015-09-12 20:46:26

标签: javascript node.js asynchronous promise bluebird

我有一个承诺链,在某些点内我有if-else条件,如下所示:

.then(function() {

   if(isTrue) {
     // do something returning a promise
   } else {
     // do nothing - just return
     return;
   }
})
.then(function() {
   ...
})

老实说,我不喜欢这种模式。我觉得不对劲。我的意思是只使用一个简单的回报你有什么想法让这个代码看起来不同吗?

2 个答案:

答案 0 :(得分:2)

else { return; }部分可以简单地完全省略而不改变代码的含义:

.then(function() {
    if (isTrue) {
        // do something returning a promise
    }
})

默认情况下,函数无论如何都会返回undefined

答案 1 :(得分:0)

我猜你已经测试了代码。并认识到这不符合您的预期。让我解释一下:

function getPromise() {
  callSomeFunctionWhichReturnsPromise().then(function(result) {
    return result; // You hope, that this will be logged on the console? nope, you have to do it here instead.
    console.log('logged in the promise', result); // This will work
  });
}

var result = getPromise();
console.log(result); // undefined!!!

你可以这样做:

function getPromise() {
  return callSomeFunctionWhichReturnsPromise();
}

var result = getPromise();
result.then(console.log); // will call console.log(arguments)