保持不同的变量's在循环中的多个匿名异步函数中的状态
Keep different variable's state in multiple anonymous asynchronous functions in a loop
我不知道如何在没有代码的情况下描述它,所以它开始了:
$('.colors').each(function() {
$.getJSON('my.json', function(data) {
$(this).css('color', data.color);
});
});
我希望getJSON
回调的主体引用父(each
回调)作用域中this
的值。
此代码将不起作用,因为this
将不再是getJSON
回调之外的代码。即使我试图将它放在一个变量中,它也不会起作用,因为所有回调只共享一个变量,而不是循环的每次迭代共享一个。
我怎样才能做到这一点?
您可以在闭包中捕获它:
$('.colors').each(function() {
var $this = $(this);
$.getJSON('my.json', function(data) {
$this.css('color', data.color);
});
});
或:
$('.colors').each(function() {
$.getJSON(
'my.json',
(function(element) {
return function(data) {
element.css('color', data.color);
};
})(this)
);
});
查看代理
$('.colors').each(function() {
$.getJSON('my.json', $.proxy(function(data) {
$(this).css('color', data.color);
}, this));
});
相关文章:
- 如何在异步函数中使用javascript对象
- 调用后不异步Ajax忽略函数
- javascript函数中的异步与同步.(Node.js)
- Meteor:异步函数回调异常:onAfterAction
- 从框架中的函数异步加载 Javascript
- 为什么在定义回调/侦听器函数(异步消息传递,port.on)后没有立即设置全局变量
- 将javascript变量传输到插件函数(异步URL)
- 如何从 JavaScript 调用 JQuery 函数(异步调用后)
- 与其他变换函数异步制作不透明度动画
- 两个异步模块函数异步工作
- durandal激活函数异步代码
- 无法使我的示例函数异步
- 当内部函数异步执行某些操作时,如何从外部函数的回调返回值
- Javascript -使函数异步
- 如何使这个同步递归函数异步
- Promise.then()但函数异步运行
- 使用setimeout使命名函数异步化
- Javascript esriRequest (dojo)在函数异步问题
- 返回嵌套函数(异步)
- 我如何使这个JS函数异步