代码之家  ›  专栏  ›  技术社区  ›  MattE

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

  •  -2
  • MattE  · 技术社区  · 7 年前

    我在这里有些不知所措,因为从我在文档中看到的内容来看,这应该是正常工作的。我有三种可能需要保存的表格。如果第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传递了一系列承诺。任何帮助都将不胜感激。

     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";
         });
    };
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   Community CDub    5 年前

    The Promise API - Angular 1.x docs

    然后(successCallback,[errorCallback],[notifyCallback]),不管承诺何时被解决或被拒绝,

    此方法返回一个新的承诺 ...

    创造新的承诺 . 我可能错了,但既然样本没有其他“错误”,那就应该是线索了。

        2
  •  0
  •   MattE    7 年前

    好吧,问题是我需要将按钮类型从“submit”更改为“button”,以便让它等待承诺的解决。我不知道为什么会这样,但一旦它到达了按钮类型为“提交”的代码的末尾,它会立即重新加载页面。当我将按钮类型改为“button”后,承诺就按预期工作了,使用了$q.all和$。何时应用.