Nodejs:如何编写高性能异步循环

时间:2011-05-20 08:30:19

标签: node.js

有一个initUrl,它的文章包含下一个博客,并且定义function getNextUrl(url, callback(err, nextUrl)),想要获得下一个第100个网址。

在stormjs(开发https://github.com/guileen/stormjs/issues/1)中,它写为

var url = initUrl;
for(var i=0; i<100; i++){
  url = getNextUrl(url, _);
}
console.log(url);

但最好的输出应该是什么,我想知道noders如何在没有3rd模块的情况下编写这段代码。

1 个答案:

答案 0 :(得分:3)

arr = [];
(function recurse(url, i) {
    getNextUrl(url, function(err, nextUrl) {
        if (!err) {
            arr.push(nextUrl);
            if (i < 100) recurse(nextUrl, i++);
        }
    });
}("", 0);

我将这种模式称为引导绑定递归。

如果你更喜欢它更简洁而又更有效率,你可以使用一些.bind魔法。

(function recurse(i, err, url) {
    if (!err) arr.push(url);

    if (i < 100) getNextUrl(url, recurse.bind(null, ++i));
}(0, "trick it", url);