【问题标题】:Stop main/current thread and let callbacks finish停止主/当前线程并让回调完成
【发布时间】:2017-11-10 11:38:30
【问题描述】:

本质上我有一段代码有点像:

function closeServerGracefully() {
  setTimeout(process.exit, 1000);
}

if (failingCondition) {
  logger.log('error', 'Fatal error exiting because failingCondition', closeServerGracefully);
}

logger.log('info', 'Everything is ok!');

logger.log 的最后一个参数是一个回调函数,在消息记录后被调用,我使用的是 winston)

但是,如果 failingCondition 确实变为 true,我的应用程序会输出以下内容:

Fatal error exiting because failingCondition
Everything is ok!

然后它当然会在几分钟后崩溃,因为没有正确发现问题。

在输入if 语句后,如何停止(或暂停或终止)“主”线程的执行?

【问题讨论】:

    标签: javascript node.js multithreading


    【解决方案1】:

    主线程不能停止,只能模拟“停止”

    What's the equivalent of Java's Thread.sleep() in JavaScript?

    你可以尝试不停地做:

    if (failingCondition) {
      logger.log('error', 'Fatal error exiting because failingCondition', closeServerGracefully);
    } else {
      logger.log('info', 'Everything is ok!');
    }
    

    【讨论】:

    • 显然我的例子很短,我不想把后面的 1000+ 行代码放到一个 else 块中
    • make else 阻塞一个/lib/模块/函数等
    • 什么意思?
    【解决方案2】:

    这是因为最后一个日志方法在超时之前被调用。

    你可以尝试的事情:

    您可以在那里尝试使用else。所以“一切正常!”如果failingConditiontrue,则不会记录。

    如果您在方法中使用它,您应该尝试在 if 块内的 logger.log() 之后使用 return;

    如果您试图捕获异常,您应该使用 try/catch 块。

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-11
      • 1970-01-01
      • 2012-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多