停止执行,直到评估结果为止

时间:2016-06-02 14:55:21

标签: javascript asynchronous promise

如何在评估条件之前停止执行,此代码始终返回undefined:

function test() {
    var allGood;
    account.isUserAuthenticated().then(function(data) {
        if (data) {
            allGood = false;
        } else {
            allGood =  true;
        }
    });
    return allGood;
}

1 个答案:

答案 0 :(得分:4)

您正在返回在异步调用(promise)中设置的结果,这意味着首先返回allGood(这就是为什么它是undefined),然后在某个时候它实际获得一个值。你应该做的是从函数中返回承诺本身:

function test() {
    return account.isUserAuthenticated().then(function(data) {
        if (data) {
            return false;
        } else {
            return true;
        }
    });
}

然后如果你跑:

test().then(function(allGood) {
  if (allGood) {
    // user is authenticated
  } else {
    // user is not authenticated
  }
});