node.js中的非阻塞需求

时间:2014-02-10 06:20:01

标签: javascript node.js

有没有办法在运行时(服务时间)在服务器上使用require(或其他相同的东西),而不会阻止整个事情?

我正在尝试添加用户定义的函数,之后他可以使用我正在实现的语言来使用它们。

所以,例如:

toaprse.mylanguage

#bind somefunctions.js
x = somefunctions.func1();

我可以做一个简单的要求('somefunction');但我不想阻止节点,我理解是这样的。

我只想将函数传递给我的框架,它不一定是require,但它看起来很自然。

2 个答案:

答案 0 :(得分:3)

这就是如何实施的要求:

> console.log(require.extensions['.js'].toString())
function (module, filename) {
  var content = NativeModule.require('fs').readFileSync(filename, 'utf8');
  module._compile(stripBOM(content), filename);
}

您可以在自己的应用中执行相同的操作。我猜这样的事情会起作用:

var fs = require('fs')

require.async = function(filename, callback) {
  fs.readFile(filename, 'utf8', function(err, content) {
    if (err) return callback(err)
    module._compile(content, filename)

    // this require call won't block anything because of caching
    callback(null, require(filename))
  })
}

require.async('./test.js', function(err, module) {
  console.log(module)
})

答案 1 :(得分:2)

看一下Promises模式。使用Promises,您可以将异步操作的执行委托给一个方法,该方法会在出现错误或成功执行给定操作后回调您。

以下是一些实现此模式的节点模块:

它有效,我承诺;)