承诺是否能及时成为条件句的一部分?
Does a promise resolve in time to be part of a conditional
我需要测试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
}
});
从下面的评论中转发,因为每个人都在"否定"这个问题,并认为这是一个重复。
嗯,是也不是。不,因为我正在使用Jasmine, expect调用在传递承诺时自动解析承诺。
expect(myPromise()).toBeGreaterThan(15)
。因此,从外部来看,可以想象if的条件可以在执行任何比较之前解析承诺。
假设myPromise
和myOtherPromise
是返回承诺的函数,您的代码似乎表明,那么NO您不能这样做:
if (myPromise() > 15 && myOtherPromise()) {
承诺是对象。因此,如果myPromise()
返回一个承诺,则:
if (myPromise())`
始终为真,并且if
语句与承诺的最终解决值完全无关。因此,第一个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
});
相关文章:
- 通过js在新选项卡中有条件地打开url
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- jQuery-有条件地附加HTML
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- 根据某些条件在视图之间切换
- 如何做到这一点,使代码在不传递条件后执行函数
- 有条件更新d3.js力图中节点的最佳方法
- javascript中的布尔条件
- Woocommerce产品选项有条件
- 如何检查字符串的一部分与数组匹配
- 基于两个条件退出While循环
- 为什么可以't我使用了AJAX响应的一部分
- 有条件地在选项标记中应用布尔属性
- 使用javascript以HTML形式验证条件
- 聚合物0.5.5:核心列表中的条件模板和/或模板动态参考
- javascript对象操作:根据指定条件选择属性
- 如何在条件下删除javascript的一部分
- 承诺是否能及时成为条件句的一部分?
- 为什么while循环中的这个条件会被执行,就好像它是循环体的一部分一样
- Javascript RegEx替换有条件地删除字符串的一部分