2014-02-10 53 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,您可以將異步操作的執行委託給一個方法,該方法在發生錯誤或成功執行給定操作後會回叫您。

下面是實現該圖案的一些節點的模塊:

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