我有两个模块,在第一个模块中我声明了一个对象,因为我知道基元是通过Java脚本中的值传递的,而对象是通过引用传递的。我想从请求中获取响应状态,并且我将对象传递为引用,因此我将能够修改其属性,问题是它什么也没做,最后的值是一样的。



//this code is in a different module from the other one
var variableToBeChanged = { something : "Initial value" };
anotherModule.changeValue(variableToBeChanged);
alert(variableToBeChanged.something);

//and in the other module I have a $.ajax and I want to get the response status(ex. 200)

//the code is sth like this:

function AnotherModule(ajax){

  function changeValue(variableToBeChanged){
    ...
    ...
    ...
    $.ajax({
      ...
      ...
      ...
      success: function(data,xhr){
          variableTobechanged.something = xhr.status;
      }
    });
  }

}





最后,它将显示:“初始值”而不是200或其他任何值。
我在这里做错了什么?

最佳答案

ajax调用是异步的,因此在修改变量之前会先调用警报。您可以像这样在ES6中使用promise来确保在ajax调用完成之后执行它。

    new Promise((resolve) =>{
             anotherModule.changeValue(variableToBeChanged);
             resolve();
        }).then((res) =>{
            alert(variableToBeChanged.something);
        }).catch((error) =>{
            alert(error);
    });

10-04 16:12