承诺是否及时解决成为条件的一部分

时间:2016-11-09 18:25:56

标签: javascript promise

我需要测试承诺的结果。承诺会及时解决成为条件的一部分吗?

if (myPromise() > 15 && myOtherPromise()) {
    // do stuff when myPromise resolves to over 15 and myOtherPromise is true
} else {
    // do stuff when myPromise resolves to 15 or less or myOtherPromise is false
}

或者我只需要吮吸它并做:

let myP = myPromise();
let myOtherP = myOtherPromise();

promise.all([myP, myOtherP]).then(function(res) {
    if (res[0] > 15 && res[1]) {
        // do stuff when myPromise resolves to over 15 and myOtherPromise is true
    } else {
        // do stuff when myPromise resolves to 15 or less or myOtherPromise is false
    }
});

从以下评论转发给所有人" downvoting"问题和思考这是重复。

  

嗯,是的,不是。不,因为我正在使用Jasmine,当一个传递时,期望调用会自动解析一个承诺。 expect(myPromise()).toBeGreaterThan(15)。因此,从外部来看,可能可以想象if if条件可能会在执行任何比较之前解决一个承诺。

1 个答案:

答案 0 :(得分:0)

假设myPromisemyOtherPromise是返回代码似乎表明的承诺的函数,那么你不能这样做:

if (myPromise() > 15 && myOtherPromise()) {

承诺是对象。因此,如果myPromise()返回一个承诺,那么:

if (myPromise())`

始终是真实的,if语句与promise的最终解析值完全无关。因此,第一个if语句不会检查任何一个promise的已解析值。

如果您想查看促销的已解决价值,则必须使用.then().all()之类的内容来获取已解决的值。没有其他方法可以访问已解析的值。

如果您要检查myPromise()myOtherPromise()的已解析值,则必须等待它们两个都解决,您应该使用Promise.all(),如第二个代码示例中所示:

Promise.all([myPromise(), myOtherPromise()]).then(function(results) {
    if (results[0] > 15 && results[1]) {
        // got the result we wanted
    }
}).catch(function(err) {
    // error here
});