【问题标题】:Loop module for Node.jsNode.js 的循环模块
【发布时间】:2010-11-26 23:02:08
【问题描述】:

几分钟前我询问了循环,请参阅Asynchronous for cycle in JavaScript

这一次,我的问题是 - Node.js 有什么模块吗?

for ( /* ... */ ) {

  // Wait! I need to finish this async function
  someFunction(param1, praram2, function(result) {

    // Okay, continue

  })

}

alert("For cycle ended");

【问题讨论】:

  • 所以你实际上想要同步调用该方法?

标签: javascript node.js


【解决方案1】:

将这些东西移到模块中很难吗?

编辑:更新了代码。

function asyncLoop(iterations, func, callback) {
    var index = 0;
    var done = false;
    var loop = {
        next: function() {
            if (done) {
                return;
            }

            if (index < iterations) {
                index++;
                func(loop);

            } else {
                done = true;
                callback();
            }
        },

        iteration: function() {
            return index - 1;
        },

        break: function() {
            done = true;
            callback();
        }
    };
    loop.next();
    return loop;
}

exports.asyncFor = asyncLoop;

还有一个小测试:

// test.js
var asyncFor = require('./aloop').asyncFor; // './' import the module relative

asyncFor(10, function(loop) {    
        console.log(loop.iteration());

        if (loop.iteration() === 5) {
            return loop.break();
        }
        loop.next();
    },
    function(){console.log('done')}
);

休息由你决定,不可能做到 100% 通用。

【讨论】:

  • 不,不是。我只是想知道是否有专门针对 Node.js 的东西。无论如何,再次感谢您!
  • 我不知道任何这样的模块,你必须为这样的通用函数编写自己的模块,通常你使用完全不同的方法来完全避免这种“异步循环”的需要。但解决方案因问题类型而异。
【解决方案2】:

是的,您可以使用Async.js

Async 是一个实用模块 提供直截了当、功能强大的 用于工作的功能 异步 JavaScript。虽然 最初设计用于 node.js,也可以直接使用 在浏览器中。

【讨论】:

  • 快速浏览了一下,但她想要做的事情在async.js中无法完全复制。她想阻塞直到回调完成,并且阻塞 X 次。虽然队列会接近,但需要对她现在拥有的代码进行一些更改。此外,她的函数内部还有另一个回调,这再次使它变得更加复杂。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
  • 2014-04-28
  • 2013-01-21
相关资源
最近更新 更多