有一个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模块的情况下编写这段代码。
答案 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);