正如我的代码所示,我目前正在向两个异步回调函数(成功和回调)传递一个承诺。我认为应该有可能以不同的方式做到这一点,但我还没有找到其他方法。
这是我创建承诺并等待它们全部完成的函数:
_onModelLoaded: function(model) {
var promises = [];
_.each(this._customRecords, function(defect, index) {
promises.push(this._getHistory(model, defect));
}, this);
Deft.Promise.all(promises).then({
success: function(something) {
console.log('woot',something);
}
});
},
该_getHistory
函数创建一个 Promise,然后将其传递给两个函数(_onHistoryLoaded 和 _onRevisionsLoaded),以便一旦运行这些回调,promise 就会得到解决:
_getHistory: function(model,defect) {
var deferred = Ext.create('Deft.promise.Deferred');
model.load(Rally.util.Ref.getOidFromRef(defect.RevisionHistory), {
scope: this,
success: function(record) {
this._onHistoryLoaded(defect, record, deferred);
}
});
return deferred.promise;
},
_onHistoryLoaded: function(defect, record, def) {
record.getCollection('Revisions').load({
fetch: ['RevisionNumber', 'CreationDate', 'User', 'Description'],
scope: this,
callback: function(revisions) {
this._onRevisionsLoaded(revisions, defect, def);
}
});
},
_onRevisionsLoaded: function(revisions, defect, def) {
_.each(revisions, function(revision, revisionIndex) {
// Do stuff with each revision
}, this);
def.resolve(defect);
},
我不一定需要通过promise传递最终的缺陷,我只是把它放在resolve语句中进行测试。
注意:我的代码运行正常,我只是在寻找简化。
有没有办法避免创建一个承诺,只通过几个异步函数来解决它?