首页 > 解决方案 > 如何防止我的数组在承诺中改变?

问题描述

我在 javascript 中使用 Promise,对于 resolve 变量,我正在传递一个多维数组。但由于某种原因,我的数组在 then 函数中发生了变化。这是我的代码,

Id_name_disp = [[], []];
var list = $("#Approversdisp").val().split(", ");
var promise = new Promise(function(resolve, reject){
  for(var i = 0; i < list.length-1; i++){
    $.ajax({
      "url" :"private",
      "type" : "GET",
      "data" : {"name": list[i].trim()},
      "contentType" : "application/json",
      "success" : function(data) {
        Id_name_disp[0] = Id_name_disp[0].concat(data[0]);
        Id_name_disp[1] = Id_name_disp[1].concat(data[1]);
        resolve(Id_name_disp);
      },
      "error" : function(jqXHR, textStatus, errorThrown)
      {
        reject(textStatus+": "+jqXHR.responseText);
      }
    });
  }
});
promise.then(function(fromresolve){
  console.log(fromresolve);
  console.log(fromresolve[0]);
  console.log(fromresolve);
  console.log(fromresolve[0].length);
  for(var k = 0; k < list.length-1; k++){
    var ind = -1;
    for(var x = 0; x < fromresolve[0].length; x++){
      console.log("x: "+x);
      console.log(fromresolve[0][x]+" "+list[k]);
      ind = fromresolve[0][x].indexOf(list[k]);
      console.log(ind);
      if(ind > -1){
        console.log("found: "+ind);
        break;
      }
    }
    sapid+=" "+fromresolve[0][ind].substring(fromresolve[0][ind].indexOf("("), fromresolve[0][ind].indexOf(")")+1)+",";
    console.log(sapid);
  }
}).catch(function(fromreject){
  alert(fromreject);
});

fromresolve 是多维数组,其中 0 位置是 6 个元素的数组,第 1 位置是 6 个元素的数组。但是当我执行 fromresolve[0] 时,我得到一个包含一个元素的数组。为什么会这样。预期的结果是 fromresolve[0] 将是一个包含 6 个元素的数组。

标签: javascriptjqueryarrays

解决方案


推荐阅读