Javascript 下划线js时代系列
我在nodejs中使用下划线js,并且需要该方法。times()将调用函数X次 这就像预期的那样工作,但是我需要在一个系列中迭代,而不是在并行中迭代,这看起来是这样的Javascript 下划线js时代系列,javascript,node.js,asynchronous,backbone.js,underscore.js,Javascript,Node.js,Asynchronous,Backbone.js,Underscore.js,我在nodejs中使用下划线js,并且需要该方法。times()将调用函数X次 这就像预期的那样工作,但是我需要在一个系列中迭代,而不是在并行中迭代,这看起来是这样的 知道有没有一种方法可以在带有回调方法的系列中使用它吗?这个异步库可能会让您开始使用它 或者,如果您想自己做,可以在调用每个函数回调后进行递归调用,下面是源代码,如下所示: function f() { some_async_call({ callback: function(err, results) {...}) }
知道有没有一种方法可以在带有回调方法的系列中使用它吗?这个异步库可能会让您开始使用它
或者,如果您想自己做,可以在调用每个函数回调后进行递归调用,下面是源代码,如下所示:
function f() {
some_async_call({ callback: function(err, results) {...})
}
_(3).times(f);
然后三个f
调用将串联发生,但是一些异步调用不一定串联发生,因为它们是异步的
如果要强制调用以串联方式运行,则需要使用异步调用上的回调来启动串联中的下一个调用:
function f(times, step) {
step = step || 0;
some_async_call({
callback: function(err, results) {
// Do something with `err` and `results`...
if(step < times)
f(times, step + 1);
}
});
}
f(3);
《泰晤士报》对这一切有何影响?不,真的
但是您仍然需要修改f
以拥有回调函数,如果您总是调用f
三次,那么:
async.series([f, f, f]);
可能比使用.range
和.map
动态构建阵列要好
这里真正的教训是,一旦您进入异步函数调用,您最终实现的所有逻辑都是回调调用回调,一路回调。只是一个for
循环,所以它确实是串联执行的。你的术语倒过来了吗?它不会等待前一个for循环完成执行,因此如果没有回调来调用下一个,那么需要一些时间的进程在下一次迭代之前不会总是完成的。那么你使用的是异步回调。看看,如果你不相信我,.times
只是(var i=0;i代码>。你必须把一些重要的事情排除在你的问题之外,比如你的回调在做什么。是的,但是node.js是异步的,所以即使我有一个for循环,for循环中的代码也不会“等待”直到上一次迭代完成。嗯,不,我想你是糊涂了。您正在交给\uTimes
的函数正在调用异步函数,节点不会为for
循环的每次迭代自动生成单独的线程。那么,你的回调函数做了什么是异步的,它支持什么类型的回调呢?我使用async,但是我应该如何定义它来执行x次?你可以做一些类似u.times(3,function(){functionary.push(theFunction);})的事情,将function()放入数组,然后异步.series(functionary)
_.times = function(n, iterator, context) {
for (var i = 0; i < n; i++) iterator.call(context, i);
};
// Untested off the top of my head code...
function f(callback) {
some_async_call({
callback: function(err, results) {
// Deal with `err` and `results`...
callback();
}
});
}
var three_fs = _(3).range().map(function() { return f });
async.series(three_fs);
async.series([f, f, f]);