我有两个模块,在第一个模块中我声明了一个对象,因为我知道基元是通过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);
});