【发布时间】:2018-07-11 14:17:23
【问题描述】:
我有点不知所措,因为从我在文档中阅读的内容来看,这应该可以正常工作。我有可能需要保存 3 种表格。第三个需要等待前 2 个如果它们存在,因为它需要返回它们的 id。我有以下设置:
var recProm = user.saveData(...).then(function(response)){...}
var stdProm = user.saveData(...).then(function(response)){...}
if(recProm) promise_array.push(recProm);
if(stdProm) promise_array.push(stdProm);
$q.all(promise_array).then(function(response)) {...}
然而,$q.all 永远不会等待承诺解决。我看到正确的承诺在数组中,但是当代码完成时它只是重定向回主页。
我不确定我在这里做错了什么,因为我正在向 $q.all 传递一系列承诺,就像文档要求的那样。任何帮助将不胜感激。
更新:saveData的代码如下:
this.saveData= function (list, model, successMsg, errorMsg) {
return $.ajax({
method: 'POST',
url: SPUrl + "/_api/web/lists/getByTitle('" + list + "')/items",
contentType: "application/json; odata=verbose",
headers: {
"X-RequestDigest": $rootScope.formRequestDigest,
"Accept": "application/json; odata=verbose"
},
dataType: 'text json',
data: JSON.stringify(model),
timeout: 0
}).then(function (data, request) {
successMsg !== undefined && successMsg !== null ? alertify.success(successMsg) : null;
return data.d;
}, function (error) {
console.log(error);
errorMsg ? alertify.error(errorMsg + ' Error: ' + error.name + ' Status: ' + error.status) : null;
return "error";
});
};
【问题讨论】:
-
您可以尝试使用
deffered = $q.defer()并使用promise_array.push(deffered.promise);推送延迟承诺(在.then中解析为deffered.resolve(...);)。 每个 http 请求使用一个延迟 -
所以我会做 recProm = $q.defer() 然后在 user.saveData(..).then(function(response){ $q.resolve(recProm);}?
-
无需使用
$q.defer()。问题的可能原因是您未能返回在.then块中创建的链式承诺。我们需要查看更多代码来理解问题。否则,我将投票结束这个问题,因为“不清楚你在问什么。” -
当问题不包含任何错误代码时,很难回答有关代码错误的问题。为了帮助解决问题,回答者是将不得不看看代码是什么。 “它似乎不起作用”没有帮助
-
jQuery
.ajax方法返回的 promise 没有与 AngularJS 框架及其摘要循环集成。相反,请使用 AngularJS $http 服务。此外,众所周知,jQuery 承诺存在问题。见You're Missing the Point of Promises。
标签: javascript angularjs angular-promise