我有点不知所措,因为从我在文档中阅读的内容来看,这应该可以正常工作。我有3种需要保存的表格。第三个需要等待它们出现的前两个IF,因为它需要返回其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";
});
};
答案 0 :(得分:1)
The Promise API - Angular 1.x docs
then(successCallback,[errorCallback],[notifyCallback])–不论承诺何时或将被解决或被拒绝, ...
此方法返回一个新的诺言,即 ...
在第1-2行,您将.then()方法附加到诺言,有效地创建了新的诺言。我可能是错的,但是由于样本中没有其他“错误”,因此应该是线索。
答案 1 :(得分:0)
好的,问题是我需要将按钮类型从“提交”更改为“按钮”,以使其等待承诺解决。我不确定为什么会这样,但是一旦按钮类型为“ submit”的代码到达代码末尾,它将立即重新加载页面,而无需等待。当我将按钮类型更改为“按钮”后,promise就会按预期的方式工作,同时使用$ q.all和$ .when.apply。