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在链上执行
然后操作,等待链结束。这就解决了问题(尽管正如您所指出的,它并没有回答字面上的问题,但这个问题实际上是关于一个问题的)。