【问题标题】:How to use array values in asynchronous function如何在异步函数中使用数组值
【发布时间】:2012-06-05 11:44:23
【问题描述】:

我有一个数组,我想将其值用作异步函数的输入。但是当我遍历我的数组并将它们发送到异步函数时,对异步函数的所有调用似乎都是由数组中的最后一个值完成的。

我以为这种问题是通过回调解决的,但是函数是我正在使用的一个库,它不提供任何回调。我应该怎么做才能让异步函数处理所有单独的数组值??

var libraryName = new Library("#div");

$.post("myfile.php", {somedata}, function(data){
    console.log(data); //prints all correct values
    for(i in data){
        libraryName.asynchronousFunction({
            name: data[i].name // <--this value only becomes the last value in the data-array for all calls
        });
    }
});

【问题讨论】:

  • 你能给我们看看asynchronousFunction - 身体吗?在你的 asynchonousFunction 的头部放置一个控制台日志 - 调用来查看它被调用了多少次
  • 您的语法无效。你是用对象调用异步函数,还是有一些回调函数?
  • 添加了一行,用于初始化库。不客气,库被压缩了..
  • 你写的语法错误。或者你传递给libraryName.asynchronousFunction 一个对象(因此name: data[i].name 被'{}' 包裹)或一个你使用data[i].name 的函数。后者可以解释你遇到的问题,这是一个常见的闭包误解。
  • 是的,抱歉,我就是这么做的。现在编辑了。那么闭包解决方案是什么?

标签: javascript asynchronous iteration


【解决方案1】:

由于闭包而尝试这样的事情:

$.post("myfile.php", {somedata}, function(data){
    console.log(data); //prints all correct values
    for(i in data){
        (function(elem) {
            libraryName.asynchronousFunction(
                {name: elem.name}
            );
        })(data[i]);
    }
});

【讨论】:

    猜你喜欢
    • 2020-03-09
    • 2019-12-18
    • 1970-01-01
    • 2014-05-20
    • 2020-12-20
    • 2016-09-29
    • 2020-01-22
    • 1970-01-01
    • 2022-10-24
    相关资源
    最近更新 更多