我正在研究Node.js的async模块来解决问题。我已经进行了一些测试:
async
var async = require("async"); function print(val) { console.log(val); } async.parallel([ function(cb){ print(1); cb(null); }, function(cb){ print(2); cb(null); }, function(cb){ print(3); cb(null); }, function(cb){ print(4); cb(null); }, function(cb){ print(5); cb(null); } ], function(err) { if ( err ) { console.error(err); return; } console.log("Done!"); } ); console.log("Trulu");
我可以确定在完成对Trulu的日志调用之前永远不会调用async.parallel它吗?换句话说,是否可以肯定在Trulu日志被调用之前调用所有函数和最终回调?
async.parallel
我可以确定在对async.parallel的调用完成之前永远不会调用Trulu日志调用吗?
电话本身,是的。
换句话说,是所有功能
我想是的,尽管文档没有提及。但是,我希望不会有任何更改,因为那样可能会破坏现有代码。
确定在Trulu日志之前调用的最终回调是吗?
否。您不知道这些函数,并且当它们异步时,最终的回调将在之后执行Trulu。如果所有功能都是同步的,则async无论如何都不要使用。实际上,尽管async.js确实在setImmediate 内部使用,所以某些回调(不幸的是难以识别)将被“异步化”,但维护者表示:
Trulu
setImmediate
是的,使函数异步取决于开发人员
如果要确保始终以异步方式(在之后Trulu)调用回调,即使函数是同步的,也可以考虑使用兼容A +的Promises。