Функция async.parallel работает после того, как другая функция вызвала функцию обратного вызова с ошибкой, почему? - PullRequest
0 голосов
/ 21 ноября 2018

Я изучал асинхронную библиотеку и сам попробовал несколько кодов, и у меня возникла проблема, которая не может быть решена, пожалуйста, посмотрите код ниже:)

    async.parallel([
    function (cb) {
        setTimeout(() => {
          let a = "asd";

          console.log("AAA");
          cb(a, null);

        }, 2000);
    },
    function (cb) {
      setTimeout( () => {
        let b = "dasd";

        console.log("BBBBB");
        cb(b, null);
      }, 5000);
    }
  ], function (error, results) {
    console.log("CCC");

    console.log("Errors: " + error);
    console.log("Results: " + results);
  });

Я предположил, что BBBНЕ должен выводить на экран, но, к моему удивлению, это так, вы можете помочь мне понять, почему?

1 Ответ

0 голосов
/ 22 ноября 2018

Вы используете async.parallel().Все асинхронные задачи будут выполняться без ожидания друг друга, и порядок выполнения не гарантируется.

Ниже приводится описание того, как выполняется ваш сценарий:

  1. Обе setTimeout() установлены.
  2. 2000 миллисекунд спустя, console.log("AAA") и cb(a, null) вызываются.
  3. cb(a, null) произошла ошибка.Итак, основной обратный вызов называется, и async.parallel() заканчивается.
  4. Но история на этом не заканчивается.Второй setTimeout() уже установлен.Вызов основного обратного вызова не очистит тайм-аут. Вызваны
  5. console.log("BBBBB") и cb(b, null).Вот почему вы видите вывод BBBBB.
  6. Поскольку основной обратный вызов уже вызван, вызов cb(b, null) ничего не сделает.
...