В Koa, в чем разница между await next (), return await next (), return next () и next () в промежуточном программном обеспечении? - PullRequest
0 голосов
/ 06 апреля 2019

В документации описывается сценарий использования «await next ()» в промежуточном программном обеспечении, в результате чего промежуточное программное обеспечение приостанавливает и запускает следующее промежуточное программное обеспечение в нисходящем направлении, пока все промежуточное программное обеспечение не будет выполнено, и в этот момент начнется каскад восходящего потока и промежуточное программное обеспечение будет полное исполнение. И если пользователь захочет сократить каскад, то написав только «возврат», вы все вместе обрежете каскад.

Что я не понимаю, так это то, что происходит, если пользователь возвращает одно из следующих действий:

const exampleMiddleware1 = async (ctx, next) => {
  return await next();

  console.log('Doing something');
};

const exampleMiddleware2 = async (ctx, next) => {
  next();

  console.log('Doing something');
};

const exampleMiddleware3 = async (ctx, next) => {
  return next();

  console.log('Doing something');
};

В первом примере, я думаю, он остановится, запустит следующее промежуточное ПО, но не завершит выполнение в восходящем каскаде.

Во втором примере, я думаю, что следующее промежуточное программное обеспечение будет запущено вместе с console.log, я не думаю, что оно сработает при повышении, может быть?

В третьем примере, я думаю, будет запущено следующее промежуточное программное обеспечение, но оно не будет запускать журнал консоли в восходящем каскаде, так же, как в первом примере.

Правильно ли мое мышление? Я пишу приложение для коа и хотел бы узнать больше о его пределах, и я нахожу эту область, которую я не совсем понимаю.

1 Ответ

2 голосов
/ 06 апреля 2019

exampleMiddleware1 и exampleMiddleware3 - то же самое (нет необходимости возвращать в ожидании)

  • ваш console.log никогда не будет называться

exampleMiddleware2

  1. Если следующее промежуточное ПО вернет обещание

    • ваш console.log будет вызывать без ожидания следующего промежуточного программного обеспечения
  2. Если следующее промежуточное ПО не вернуть обещание

    • Следующее промежуточное ПО завершится, затем console.log
...