我的背景是系统编程/数据管理。 Web开发场景和javascript的新功能。一直在探索可用于服务器端和客户端开发的众多npm模块,这很有趣。当我探索这些模块并在我的代码中进行实验时,我注意到了一个反复出现的困难。
作为一个具体的例子,我刚刚将Browserify npm模块插入到node.js网络应用程序中。 Browserify的文档建议像这样使用它:
var brow = browserify(__dirname + '/client_js/main.js', {debug:true});
brow.bundle(function(err, buf){ ... });
使用npm模块时遇到的一个常见问题是,我无法一眼就看出模块功能是否异步。在这种情况下,我会假设browserify()是异步的,因为我传入一个文件路径,我假设该函数将读取该文件路径,这将在事件循环上放置一些todo。另一方面,browserify()不接受回调函数,这表明它不是异步的吗?
假设browserify()是异步的,在下一行调用brow.bundle()之前,如何确保它在事件循环中放置的所有事件都已完成?
在这个例子和许多其他使用npm模块的情况下,我想知道模块函数是否会在我依赖脚本后面的结果之前完成。有办法告诉吗?如果唯一的解决方案是阅读模块源,这是公平的,但它为采用新模块带来了沉重的负担。
我知道有一个npm模块试图帮助解决这个问题:https://www.npmjs.com/package/is-async-function。这是最好的解决方案吗?