2014-02-10 30 views
1

有没有办法在运行时(服务时间)在服务器上使用require(或其他相同的东西),而不会阻塞整个事物?node.js中的非阻塞需求

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

因此,举例来说:

toaprse.mylanguage

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

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

我只是想将功能传递给我的框架,它不一定是require,但它似乎很自然。

+1

正确的做法是让所有需要运行在服务器的初始化。如果你正在使用许多自定义库,你希望延迟加载,你可以通过requirejs http://requirejs.org/docs/node.html来实现。 – Sagish

回答

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

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

下面是实现该图案的一些节点的模块:

它的工作原理,我答应;)