私のコードが示すように、私は現在、2 つの非同期コールバック関数 (success と callback) に promise を渡しています。これを別の方法で行うことは可能だと思いますが、他に方法はまだ見つかりません。
プロミスを作成し、それらがすべて完了するのを待つ私の関数は次のとおりです。
_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 を作成し、それを 2 つの関数 (_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);
},
最終的な欠陥をプロミスに渡す必要は必ずしもありません。テストのために解決ステートメントに入れるだけです。
注:私のコードは正しく実行されます。簡略化を求めているだけです。
それを解決するためにいくつかの非同期関数を通過させるためだけにプロミスを作成しないようにする方法はありますか?