我有一个简单的 if else 场景,如果设置了变量,我需要执行某些操作,否则只需在 else 部分执行:
if(flag) {
doSomething();
}
doNextThing(someParam);
如果设置了标志,那么我必须 doSomething() 和 doNextThing()
doSomething 和 doNextThing 都返回 Promise。实现这一点的最佳方法是什么?
目前我的代码如下所示:
if(flag) {
doSomething().then(doNextThing);
}
else doNextThing(someParam);
在更简洁的代码段中优雅地将两者结合起来的最佳方式是什么?
我尝试过:
var somePromise = new Promise(function(resolve, reject){
if(flag)
doSomething.then(resolve(result));
else resolve();
})
return somePromise.then(doNextThing(resolvedValue))
但这不起作用。似乎 promise doSomething 永远不会解析并且代码立即返回。我还尝试了上述的几种变体,包括:
var somePromise = new Promise(function(resolve, reject){
if(flag)
doSomething.then(resolve);
else resolve();
})
和:
var somePromise = new Promise(function(resolve, reject){
if(flag)
doSomething.then(function(result){
resolve(result);
}.bind(this));
else resolve();
}.bind(this));
但除了第一个选项之外,没有任何效果。所以,我的问题是 - 有没有更好/优雅的方法来实现这一目标?
最佳答案
像这样怎么样:
Em.RSVP.allSettled([
!flag || doSomething(),
doNextThing()
])
它将尝试数组中的每一项,但如果标志为 false,则跳过第一项。如果您希望在 doSomething() 失败时跳过 doNextThing(),请使用 Em.RSVP.all()。
关于javascript - Ember.RSVP 中的条件 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34663890/