如何检查NodeJS程序是否将存在

时间:2019-02-05 18:03:25

标签: javascript node.js asynchronous event-loop

假设某人实现了另一个setTimeout函数:

const setTimeout = (func, ms) => {
  const future = Date.now() + ms;
  while (Date.now() < future) {
    // do nothing
  }
  func();
};

(为简单起见,其中的哪个)接口与原始接口几乎相同。 作为开发人员,我如何才能验证它没有初始化任何异步代码?

我想知道在使用setTimeout调用之后我的程序是否存在。 如果setTimeout是使用同步代码实现的,则该程序将(不久)存在。 如果setTimeout的实现是异步的,则该程序仅在异步代码完成后才存在。

更具体地说,我可以这样做吗?

setTimeout(()=>{},1000);
const isAnyAsyncCodeWillRun = ...;
if(isAnyAsyncCodeWillRun){
   console.log('Program wont exist right now, only in about 1000ms');
} else {
   console.log('Program will exist now');
}

1 个答案:

答案 0 :(得分:2)

是的,术语“异步”表示该函数在完成其工作之前返回,并且在提供回调时将在以后调用该函数。所以你可以使用

let done = false;
let returned = false;
unknownFunction(() => {
    done = true;
    if (returned) console.log("callback is getting called asynchronously");
});
returned = true;
if (done) console.log("callback was called synchronously");

当然,您不能同步确定该函数以后是否会异步执行某些操作(除非您的环境为此提供了特殊的挂钩)。