运行 代码在 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 事件循环性质的这些资源以及正确使用它的方法:
- https://strongloop.com/strongblog/node-js-event-loop/
- https://nodesource.com/blog/understanding-the-nodejs-event-loop/
- http://abdelraoof.com/blog/2015/10/28/understanding-nodejs-event-loop/
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) {
//...
我是 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。
- https://strongloop.com/strongblog/node-js-event-loop/
- https://nodesource.com/blog/understanding-the-nodejs-event-loop/
- http://abdelraoof.com/blog/2015/10/28/understanding-nodejs-event-loop/
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) {
//...