我是node.js的新手。 我已经研究过如何在google上的node.js线程循环(事件循环)之外运行我的代码,但无法得到答案。
如何创建在节点事件循环外运行的函数。 例如,在mongoose中,它使用
scheme.save(function(err)){
console.log('saved');
});
插入数据,其中节点在事件循环外运行插入代码(保存函数),然后返回到事件循环以运行我的回调(在上面的示例中,执行一些日志记录)。
我试试
function getUser(id, callback) {
setTimeout(function() {
console.log('executed');
callback(null, "jhon");
}, 5000);
}
function display(err,user) {
console.log(user);
}
getUser(432, display);
console.log('this show first');
但它同步运行(它在处理新请求之前阻止事件循环5秒)。
如何实现相同的“保存”功能,以便它不会在上面的代码中阻止事件循环5秒? 任何要阅读的主题? 感谢。
答案 0 :(得分:0)
正如@SteveCampbell所说 - 假设setTimeout(function() { /// }, 5000)
将阻止事件循环,你错了 - 它不会。
它将仅延迟执行函数内部代码5秒。
虽然持续5秒,但NodeJS引擎完全可以运行,可以执行其他操作,接收和发送网络请求以及执行任何其他I / O.
检查NodeJS事件循环性质上的那些资源以及正确使用它的方法:
UPD
"代码,如获取rss数据" - 再次仅创建任务并添加在任务完成时执行的回调。它没有阻止任何东西,这是NodeJS异步代码背后的主要酷想法。 点击example rss reader in NodeJS:
//1 - task configuration
var req = request('http://somefeedurl.xml')
, feedparser = new FeedParser([options]);
// here while rss is being retrieved in a separate sub task
// nodejs engine can do other tasks
//2- callback for error
req.on('error', function (error) {
// handle any request errors
});
//2- callback for response with data
req.on('response', function (res) {
//...