我正在使用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;
}
}
考虑到一些承诺依赖于其他承诺,我如何保持长期运行的承诺,直到所有相关承诺都已完成?
答案 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);
});
}
}