Javascript $q.all未等待promise数组返回/拒绝
我在这里有点不知所措,因为从我在文档中阅读的内容来看,这应该可以正常工作。我有3张表格需要保存。第三个需要等待前2个,如果他们在场,因为它需要返回他们的id。我有以下设置:Javascript $q.all未等待promise数组返回/拒绝,javascript,angularjs,angular-promise,Javascript,Angularjs,Angular Promise,我在这里有点不知所措,因为从我在文档中阅读的内容来看,这应该可以正常工作。我有3张表格需要保存。第三个需要等待前2个,如果他们在场,因为它需要返回他们的id。我有以下设置: var recProm = user.saveData(...).then(function(response)){...} var stdProm = user.saveData(...).then(function(response)){...} if(recProm) promise_array.push(recPr
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传递一系列承诺。所有这些都是文档要求的。任何帮助都将不胜感激
更新: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";
});
};
然后(successCallback、[errorCallback]、[notifyCallback])–无论承诺何时或将何时解决或拒绝
此方法返回一个新的承诺,即
在第1-2行,您将向承诺附加一个.then()方法,有效地创建了一个新的承诺。我可能错了,但既然示例没有其他“错误”,这应该是线索。好的,问题是我需要将按钮类型从“提交”更改为“按钮”,以使其等待承诺解决。我不知道为什么会出现这种情况,但当它到达按钮类型为“submit”的代码末尾时,它将立即重新加载页面,而无需等待。当我将按钮类型更改为“button”时,承诺就按照预期工作,同时使用$q.all和$.when.apply 您可以尝试使用
reffered=$q.defer()
并使用promise\u array.push(reffered.promise)推送延迟承诺代码>(在内部解析。然后
作为差异。解析(…);
)。每个http请求使用一个延迟,这样我就可以执行recProm=$q.defer(),然后在user.saveData(..)内部执行。然后(函数(响应){$q.resolve(recProm);}?无需使用$q.defer()
。您问题的可能原因是您未能返回在块中创建的链接承诺。然后,
块。我们需要查看更多代码以了解问题。否则,我将投票结束此问题,因为“不清楚您在问什么”当问题不包含任何错误代码时,很难回答有关代码中错误的问题。为了帮助解决问题,回答者必须查看代码是什么。“它似乎不起作用”没有帮助jQuery。ajax
方法返回的承诺没有与AngularJS框架及其摘要周期集成。相反,请使用AngularJS$http服务。此外,已知jQuery承诺有问题。请参阅。如果块中的函数未能包含,则新承诺将立即生效使用undefined
@georgeawg的值直接解决问题,这是问题的一部分,在重新加载页面之前,它甚至没有到达.then部分。then确实返回到它。显示重新加载页面的代码在哪里?当问题不包括任何f错误代码。@georgeawg的形式是使用ng submit,因此我假设一旦到达代码末尾,它将根据submit按钮功能的情况重新加载,也许我应该将其更改为type=“button”,然后看看会发生什么