Javascript 迭代在每个元素上运行异步任务的数组

Javascript 迭代在每个元素上运行异步任务的数组,javascript,multithreading,node.js,asynchronous,Javascript,Multithreading,Node.js,Asynchronous,我有一个项目列表,我想在每个项目上运行一个异步任务 我希望同步,以便在前一个元素完成后处理每个元素。到目前为止,我尝试的是: function processItems(items) { var i = 0; while(i < items.length) { asyncFunc(items[i], function() { i++ }); // asyncFunc takes a callback parameter } } 函数处理项

我有一个项目列表,我想在每个项目上运行一个异步任务

我希望同步,以便在前一个元素完成后处理每个元素。到目前为止,我尝试的是:

function processItems(items) {
    var i = 0;
    while(i < items.length) {
      asyncFunc(items[i], function() { i++ }); // asyncFunc takes a callback parameter       
    }
}
函数处理项目(项目){
var i=0;
while(i
但是,这将永远循环(我认为
I
超出了回调函数的范围)


有没有更好的方法来实现这一点?

我认为以下几点可以满足您的需求:

function processItems(items) {
    var i = 0,
        length = items.length,
        fn = function() {
            if(i < length) {
                asyncFunc(items[i], fn);
                i++;
            }
        };

    fn();
}

我认为以下几点可以满足您的需求:

function processItems(items) {
    var i = 0,
        length = items.length,
        fn = function() {
            if(i < length) {
                asyncFunc(items[i], fn);
                i++;
            }
        };

    fn();
}

如果需要串联执行一组异步函数,我强烈建议使用for节点。 它提供了一种串联执行异步任务的方法。它还提供了一种将上一个任务的结果传递给下一个任务的方法。

哎呀。你在找我。以下是它对您的工作原理:

var async = require('async');

async.eachSeries(items, asyncFunc, function(err){ if(err) return "OH NO"; return "Yay!"})

确保
asyncFunc
调用带有错误或null的回调。

如果需要串联执行一组异步函数,我强烈建议使用for节点。 它提供了一种串联执行异步任务的方法。它还提供了一种将上一个任务的结果传递给下一个任务的方法。

哎呀。你在找我。以下是它对您的工作原理:

var async = require('async');

async.eachSeries(items, asyncFunc, function(err){ if(err) return "OH NO"; return "Yay!"})

确保
asyncFunc
调用带有错误或空值的回调。

查看系列示例,这将如何转化为我在数组上迭代并在每个数组上连续调用异步函数的问题?@ioseph我修改了我的答案,以演示异步函数库的正确使用,这将如何转化为我在数组上迭代并在每个数组上连续调用异步的问题?@ioseph我修改了我的答案,以演示异步库的适当使用。这是一个使用递归比使用迭代方法更简单的好例子,用递归求解比迭代法简单的好例子