首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将调用者函数和被调用函数封装在process.nextTick中会使它们异步吗?

将调用者函数和被调用函数封装在process.nextTick中会使它们异步吗?
EN

Stack Overflow用户
提问于 2017-01-26 08:22:02
回答 1查看 31关注 0票数 0

process.nextTick函数已经在process.nextTick中时,是否需要从start调用start function?我想让acceptstart函数都是异步的?实现这一目标的理想方法应该是什么?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function accept() { // ACCEPT FUNCTION
   process.nextTick(() => {
      start(); // START CALL
   });
}

function start() { // START FUNCTION
  process.nextTick(() => {
      startPolling();
  });
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-26 10:28:36

不是的。如果startPolling()函数被阻塞,那么把它放在nextTick()回调中是没有用的。它会在事件循环的下一个节拍阻塞整个线程--但它还是会阻塞它。

示例:

不使用nextTick

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function x() {
    fs.readFileSync('file');
}
x(); // <-- it blocks here
console.log('...');

使用nextTick

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function x() {
    pricess.nextTick(() => fs.readFileSync('file'));
}
x();
console.log('...');
// <-- it blocks here
// (end of file)

它实际上不会在文件的最后一行阻塞,但它或多或少会发生-你的代码将继续运行,一旦没有更多的代码可运行,事件循环的下一个滴答可以启动,你的进程将在函数上阻塞,并且在fs.readFileSync()返回之前将不会发生任何事情。

process.nextTick()永远不是阻塞代码的解决方案。例如,在某些情况下,它对非阻塞代码很有帮助,例如,您希望保持执行顺序的一致性,但是阻塞代码的解决方案不是使用nextTick,而是完全避免阻塞函数(如fs中的“同步”函数)。

事实上,您唯一应该使用阻塞函数(如readFileSync()require())的地方是在事件循环的第一个节拍-并且使用nextTick()可以保证您不会在第一个节拍运行它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41869323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文