Buz*_*zzy 3 asynchronous node.js underscore.js
是否有一些类似于下划线的框架允许我在集合上运行异步方法.
像_.each(collection,itemCallback,doneCallback)之类的东西.
例如:
_.each(items, function(item, token){
item.someProperty = null;
}, function(err){
console.log("The loop is done");
});
Run Code Online (Sandbox Code Playgroud)
编辑: async.js实际上并没有解决问题.例如以下代码
<script type="text/javascript" src="async.js"></script>
<script type="text/javascript">
var arr = ["a","b","c"];
async.forEach(arr, function(item, met){
console.log(item);
},
function(err){
});
console.log("Done");
</script>
Run Code Online (Sandbox Code Playgroud)
打印abc完成
虽然我想要它打印完成abc
我可以使用下划线deffer但也许还有一些其他的lib可以在没有包装器的情况下完成它.
Eri*_*vez 18
Async.js模块可以解决这个问题.您的示例太快,您无法完全注意到它实际上正如您所期望的那样工作.这是一个添加了小延迟的示例,因此您可以注意到实际的执行顺序:
async.each([0,1,2,3,4,5,6,7,8,9], function(item, callback) {
setTimeout(function() {
console.log('>', item);
callback();
}, 2 * Math.random() * 1000);
}, function(err) {
console.log('> done');
});
console.log(':)');
Run Code Online (Sandbox Code Playgroud)
并输出:
:)
> 4
> 5
> 2
> 7
> 8
> 3
> 0
> 1
> 9
> 6
> done
Run Code Online (Sandbox Code Playgroud)
另外,要真正实现异步,您可以考虑使用Web Workers ; 但是现在Async.js为您提供了一种非常简单的方法来执行类似(但不是实际的Web Workers)名为queue的操作:
var q = async.queue(function(item, callback) {
setTimeout(function() {
console.log('>>', item);
callback();
}, 2 * Math.random() * 1000);
}, 5);
q.drain = function() {
console.log('>> done');
};
q.push([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
console.log('B)');
Run Code Online (Sandbox Code Playgroud)
并输出:
B)
>> 1
>> 2
>> 5
>> 6
>> 4
>> 3
>> 0
>> 7
>> 8
>> 9
>> done
Run Code Online (Sandbox Code Playgroud)
如果最后你同时运行两个,这里是一个输出的例子:
:)
B)
>> 2
> 3
>> 4
>> 1
> 8
>> 6
> 7
> 1
> 4
>> 3
> 0
> 2
>> 7
>> 5
> 6
> 5
> 9
> done
>> 8
>> 0
>> 9
>> done
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8793 次 |
最近记录: |