在我的余烬代码的某个地方我有
myobject.save();
我想检测保存何时完成。因为那时对象已经获得了ID。
我知道save
方法返回一个promise,我可以使用then()
在保存完成后执行代码。但这种模式在我的案例中不起作用。
我的代码中的其他地方我正在做几件事然后我想得到myobject
的ID。然后我可能要等到对象完成保存并获得ID。我需要id,因为它应该是转换到动态路由的一部分。路由操作处理程序中的代码如下所示:
myobject.DoSomeStuffAndThenSave();
....
// Do some other stuff that might take some time
....
this.transitionTo('myroute', myobject.get('id'));
我想我需要检查isSaving
标志,如果isSaving
标志为真,我应该听isUpdated
事件。但是我该怎么做?
答案 0 :(得分:1)
你可以在你的方法中返回另一个承诺,做一些可能需要一些时间的其他事情。然后将您的路由转换放在该承诺的.then()中:
// models/myobject.js
export default DS.Model.extend({
// ...
aLongRunningMethod () {
return new Ember.RSVP.Promise((resolve, reject) => {
// do whatever long process you need to do here
resolve();
});
}
});
// whatever file you're saving the model in
myobject.aLongRunningMethod().then(() => {
myobject.save().then(obj => {
this.transitionTo('myroute', obj.get('id'));
});
});
或者如果您需要先保存它,您可以按相反的顺序使用这些方法:
myobject.save().then(obj => {
obj.aLongRunningMethod().then(() => {
this.transitionTo('myroute', obj.get('id'));
});
});