一次解决多个相互依赖的承诺

时间:2016-09-01 03:42:17

标签: ember.js

我正在使用ember-async button,它将显示一个微调器,直到动作承诺结算。

{{async-button action=(action "save" model) default="Save" pending="Saving..."}}

在我的情况下,我无法启动孩子的承诺,直到父承诺得到解决。

这不起作用,一旦父承诺解决,微调器就会停止。

actions: {
  save(model) {
    cont promise = model.save();

    promise.then(() => {
      const promises = [];
      model.get('subModels').forEach((subModel) => {
        promises.pushObject(subModel.save());
      });

      return Ember.RSVP.all(promises);
    });

    return promise;
  }
}

考虑到一些承诺依赖于其他承诺,我如何保持长期运行的承诺,直到所有相关承诺都已完成?

2 个答案:

答案 0 :(得分:2)

  

如果所有相关承诺都已完成,我如何保持长时间运行的承诺?

初始承诺会在结算时解决(当顶级保存完成时),并且您无法继续运行"。您需要返回保存所有子模型的承诺。

return promise.then(() => {
  const promises = [];
  model.get('subModels').forEach((subModel) => {
    promises.pushObject(subModel.save());
  });
  return Ember.RSVP.all(promises);
}

或更简单地说,使用map

return promise.then(() => 
  Ember.RSVP.all(model.get('subModels').map(subModel => subModel.save()));

答案 1 :(得分:0)

return promise的问题很简单,而不是返回promise.then(...)的结果。

actions: {
  save(model) {
    cont promise = model.save();

    return promise.then(() => {
      const promises = [];
      model.get('subModels').forEach((subModel) => {
        promises.pushObject(subModel.save());
      });

      return Ember.RSVP.all(promises);
    });
  }
}