Функция setImmediate () не вызывается после функции process.nextTick () - PullRequest
0 голосов
/ 12 сентября 2018

Для этого фрагмента:

const foo = [1, 2];
const bar = ['a', 'b'];

foo.forEach( num => {
  console.log(`setting setImmmediate ${num}`);
  setImmediate(() => {
    console.log(`running setImmediate ${num}`);
    bar.forEach(char => {
      console.log(`setting nextTick ${char}`);
      process.nextTick(() => {
        console.log(`running nextTick ${char}`);
      })
    })
  });
} )

Вывод:

$ node scratch.js                   
setting setImmmediate 1
setting setImmmediate 2
running setImmediate 1
setting nextTick a
setting nextTick b
running setImmediate 2
setting nextTick a
setting nextTick b
running nextTick a
running nextTick b
running nextTick a
running nextTick b

Из документов

nextTickQueue будетобрабатывается после завершения текущей операции независимо от текущей фазы цикла событий.

Как я понимаю, process.nextTick() добавит к текущему событию nextTickQueue и выполнится сразу после текущего событиянезависимо от того, в какой фазе находится цикл обработки событий.

Разве выходные данные для этого не должны быть следующими?

setting setImmmediate 1
setting setImmmediate 2
running setImmediate 1
setting nextTick a
setting nextTick b
running nextTick a
running nextTick b
running setImmediate 2
setting nextTick a
setting nextTick b
running nextTick a
running nextTick b

1 Ответ

0 голосов
/ 12 сентября 2018

nextTickQueue будет обработано после завершения текущей операции независимо от текущей фазы цикла событий.

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

От Даниала Хана Что вы должны знать, чтобы по-настоящему понять цикл событий Node.js /:

enter image description here

...