7

次のような関数からプロミスを返しています。

resultPromise = dgps.utils.save(opportunity, '/api/Opportunity/Save', opportunity.dirtyFlag).then(function () {

                self.checklist.saveChecklist(opportunity).then(function () {

                    self.competitor.save(opportunity.selectedCompetitor()).then(function ... etc.
return resultPromise;

上記の関数が save と呼ばれるとしましょう。

呼び出し関数では、チェーン全体が完了するのを待ってから何かをしたいと考えています。私のコードは次のようになります。

var savePromise = self.save();
savePromise.then(function() {
    console.log('aftersave');
});

その結果、promise のチェーンがまだ実行されている間に「aftersave」がコンソールに送信されます。

チェーン全体が完了した後に何かを行うにはどうすればよいですか?

4

1 に答える 1

8

promise を入れ子にする代わりに、連鎖させます。

resultPromise = dgps.utils.save(opportunity, '/api/Opportunity/Save', opportunity.dirtyFlag).then(function () {

                    return self.checklist.saveChecklist(opportunity);
                }).then(function () {

                    return self.competitor.save(opportunity.selectedCompetitor());
                }).then(function () {
                    // etc
                });

// return a promise which completes when the entire chain completes
return resultPromise;
于 2013-01-05T15:48:15.303 に答える