运行 代码在 node.js 线程循环之外

Running code outside node.js thread loop

我是 node.js 的新手。 我已经在研究如何 运行 我的代码在 google 的 node.js 线程循环(事件循环)之外,但无法得到答案。

如何创建 运行 节点事件循环之外的函数。 例如,在猫鼬中,它使用

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 秒)。

我怎样才能实现相同的 'save' 功能,这样它就不会在上面的代码中阻塞事件循环 5 秒? 任何主题阅读? 谢谢。

正如@SteveCampbell 所说 - 你假设 setTimeout(function() { /// }, 5000) 会阻塞事件循环是错误的 - 它不会。 它只会延迟函数内部代码的执行 5 秒

最后 5 秒,NodeJS 引擎完全可以运行,可以执行其他操作,接收和发送网络请求以及执行任何其他操作 I/O。

检查有关 NodeJS 事件循环性质的这些资源以及正确使用它的方法:

UPD

"code like fetching rss data" - 再次 只创建一个任务 并添加一个在任务完成时执行的回调。它不会阻塞任何东西,这是 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) {
 //...