我需要测试承诺的结果。承诺会及时解决成为条件的一部分吗?
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条件可能会在执行任何比较之前解决一个承诺。
答案 0 :(得分:0)
假设myPromise
和myOtherPromise
是返回代码似乎表明的承诺的函数,那么你不能这样做:
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
});