Javascript 等待承诺和嵌套完成

Javascript 等待承诺和嵌套完成,javascript,jquery-deferred,promise,Javascript,Jquery Deferred,Promise,我从这样一个函数返回一个承诺: resultPromise = dgps.utils.save(opportunity, '/api/Opportunity/Save', opportunity.dirtyFlag).then(function () { self.checklist.saveChecklist(opportunity).then(function () { self.competitor.save(op

我从这样一个函数返回一个承诺:

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;
var savePromise = self.save();
savePromise.then(function() {
    console.log('aftersave');
});
假设上面的函数名为save

在调用函数中,我希望等待整个链完成,然后执行一些操作。我的代码如下所示:

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;
var savePromise = self.save();
savePromise.then(function() {
    console.log('aftersave');
});
结果是,“aftersave”被发送到控制台,而承诺链仍在运行


在整个链条完成后,我该如何做呢?

不要把承诺嵌套起来,而是把它们串起来

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;

如果有条件呢?你不需要延迟对象吗?这不是问题的答案。问题是如何等待链条结束。简单地向链中添加更多元素不是一个解决方案,而且通常无法正常工作。@MeanEYE在链上执行
然后
操作,等待链结束。这就解决了问题(尽管正如您所指出的,它并没有回答字面上的问题,但这个问题实际上是关于一个问题的)。