javascript - Ember.RSVP 中的条件 promise

标签 javascript ember.js rsvp.js rsvp-promise

我有一个简单的 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/

相关文章:

javascript - 如何调试 jquery AJAX 调用?

javascript - 闭包的返回值未定义

javascript - Ember.js 模型函数,无法读取未定义的属性 'find'

javascript - Ember.RSVP.all 似乎立即解决

javascript - Ember.RSVP.Promise 中的 AJAX 调用

javascript - 使用样式组件和样式系统添加条件样式的最佳方法是什么?

javascript - 如何在文件选择器中获取文件名以使用react?

javascript - 管理模板中定义的嵌套 View 的顺序

ember.js - 在没有互联网连接的情况下创建新的 ember 项目?

javascript - 如何使用 promises 异步读取多个文件,然后继续