Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $q.all未等待promise数组返回/拒绝_Javascript_Angularjs_Angular Promise - Fatal编程技术网

Javascript $q.all未等待promise数组返回/拒绝

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

我在这里有点不知所措,因为从我在文档中阅读的内容来看,这应该可以正常工作。我有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传递一系列承诺。所有这些都是文档要求的。任何帮助都将不胜感激

更新: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”,然后看看会发生什么