我想知道如何按值而不是按引用将数据传递到 jQuery Deferred
对象上的 then
处理程序中。
我有以下示例代码来说明我的问题:
var value;
var deferred = new $.Deferred();
var data = ["A", "B", "C", "D"];
// add a separate call to the chain for each piece of data
for (var i = 0; i < data.length; i++) {
value = data[i];
deferred.then(function(response) {
console.log(response+':'+value);
});
}
deferred.resolve("test");
我想要得到的结果:
test:A
test:B
test:C
test:D
我实际得到的结果:
test:D
test:D
test:D
test:D
似乎 value
的值是在执行 then
处理程序时评估的,而我希望它在执行 then< 时评估它
处理程序已排队。
我有一个JSfiddle ,希望有人能帮忙?
最佳答案
是的..你必须围绕它创建一个封闭
for (var i = 0; i < data.length; i++) {
value = data[i];
deferred.then( function(val) {
return function(response) {
console.log(response+':'+val);
}}(value));
}
关于javascript - 如何按值将数据传递到延迟 then 处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29853842/