Как проверить, существует ли программа NodeJS? - PullRequest
0 голосов
/ 05 февраля 2019

Скажем, кто-то реализовал другую функцию 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 голосов
/ 05 февраля 2019

Да, термин «асинхронный» означает, что функция возвращается до того, как она закончила выполнять свою работу, и при наличии обратного вызова вызовет ее позже.Таким образом, вы можете использовать

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");

Конечно, вы не можете синхронно определить, будет ли функция впоследствии делать что-то асинхронно (если в вашей среде не предусмотрены специальные ловушки для этого).

...