javascript - 如何按值将数据传递到延迟 then 处理程序?

标签 javascript jquery ajax deferred pass-by-value

我想知道如何按值而不是按引用将数据传递到 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/

相关文章:

jquery - onmouseover 与动画 Canvas 的完整性

jquery - 光滑的轮播不会调整大小

JavaScript 幻灯片放映不流畅

javascript - 使用 Google Maps Api 和外部 Json 文件

ajax - 如何使用 ajax 或 JS 技巧将数据发送到具有相同 TCP 连接的服务器

javascript - javascript 的正则表达式

javascript - 使用 Serverless v1.4.0 为 AWS Lambda 设置环境变量时遇到问题

javascript - 如何在jquery中的keyup()上比较手机号码的第一个字母,即0或不是

javascript - 无法在 Node.js 中使用 ECDH 私钥签署缓冲区

javascript - 使用来自服务器的 url 与 root 不匹配的路由器进行 react