CommonJS是同步的,但是如果调用了异步函数会发生什么

时间:2015-04-26 23:31:08

标签: node.js commonjs

CommonJS使用同步的require()语句,但是如果你有这样的模块怎么办:

function asyncFunction() {
    var promise = ...;
    return promise;
}

module.exports = asyncFunction();

这里会出现什么样的问题?你应该总是为module.exports对象返回同步代码吗?例如,如果module.exports = {}它始终是同步的,但在上面的例子中,module.exports是一个promise,假设是不被认为是同步的。如果您需要导入本质上异步的模块,是否有充分的理由在服务器端使用requireJS?

1 个答案:

答案 0 :(得分:1)

  

这里会出现什么样的问题?

这违反了CommonJS惯例,对开发人员来说会让人感到惊讶。它表明您不区分代码和数据。服务器上的节点中的代码可以并且应该同步加载。数据可以而且应该使用promises,callbacks等。

  

是否有充分的理由在服务器端使用requireJS

不是我见过的。就个人而言,requireJS很糟糕,如果你的模块介绍它,我绝对没有机会在我的节点项目中使用它。

  

如果您需要导入天生异步的模块?

您需要提供具体信息。我从未见过一个节点模块本质上是异步的,至少不是那些了解代码和数据之间差异的人,并且意识到动态地将远程代码加载到正在运行的node.js服务器中应用程序是大多数部署希望避免的,包括可靠性和安全性等。