在加载 CommonJS 模块时,我们使用 require
语句,这是同步的。
但是加载模块并不涉及从磁盘读取它们并解释它们。那么,在我们提倡非阻塞 I/O 的设置中,require
为何是同步的?
更新:
我在客户端中见过并使用过 requireJS,并且能够体会到它的异步特性。我想知道的是,为什么在服务器中做这种事情并不普遍(我知道 requireJS 可以在 Node 中使用,但这不是重点)。
此外,我想知道在我的代码中要求内联模块是否会使我的代码阻塞,以及这是否是一种不好的做法并且应该避免。
最佳答案
要求
模块通常是您在程序开始时执行的操作。如果您不在程序开始时执行此操作,结果无论如何都会被缓存。启动这样的程序:
var fs = require('fs');
var http = require('http');
var oranges = require('oranges');
// Do stuff
与启动这样的程序的工作方式相同:
require('async', function(err, async) {
async.map(['fs', 'http', 'oranges'], function(err, modules) {
var fs = modules[0], http = modules[1], oranges = modules[2];
// Do stuff
});
});
区别在于其中一个过于复杂。是的,可能会实现某种语法糖,但它仍然没有任何好处,除非在一些微小的边缘情况下。
关于javascript - 为什么 CommonJS 的 require 函数不是异步的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13903177/