Об асинхронности / жду в коа2 - PullRequest
0 голосов
/ 17 мая 2018

Я использую async/await в коа2, как показано ниже

const Koa = require('koa');
const app = new Koa();

app.use(async (ctx, next) => {
  await next()
  console.log("1------>"+Date.now())
});

app.use(async (ctx, next) => {
  await next()
  console.log("2------>"+Date.now())
});

app.use(async (ctx, next) => {
  await next()
  console.log("3------>"+Date.now())
});

app.use(async (ctx, next) => {
  await next()
  console.log("4------>"+Date.now())
});

app.listen(3000);

Запустите этот код, я получу журнал как это

4------>1526575713792
3------>1526575713794
2------>1526575713795
1------>1526575713795

А вот и мои вопросы

  1. Что такое next в app.use(async (ctx, next), это функция?

  2. await next() в каждой app.use функции означает wait, please run the next app.use first, если нет следующей app.use, проигнорируйте ее и запустите код в последней функции app.use, я прав?

  3. Если я изменю первый app.use на app.use(async (ctx) => { console.log("1------>"+Date.now())}); и запусту его, результат будет иметь только одну запись 1------>1526576945380. Я думал, что вторая функция app.use продолжит работать, и я получу результат, подобный этому

    1 ------> 1526576945360

    4 ------> 1526575761869

    3 ------> 1526575761869

    2 ------> 1526575761869

Так, кто-нибудь может мне помочь? и объяснить для меня? Большое спасибо.

1 Ответ

0 голосов
/ 17 мая 2018
  1. да next - это функция, console.log(typeof next) показал бы вам это.
  2. Да, вызов next даст команду koa выполнить следующее промежуточное ПО, которое было зарегистрировано, например, с помощью. use и возвращает Обещание, которое является решающим, как только будет решено следующее промежуточное значение, с await перед этим next ваш код будет ждать там, пока это Обещание не будет решено.
  3. почему вы ожидаете, что следующие промежуточные программы, которые были зарегистрированы с use, называются? Вы не звоните next, поэтому вы завершаете в этом промежуточном программном обеспечении. await - это функция js для ожидания разрешения Обещания. next - это функциональная возможность koa для запуска следующего промежуточного программного обеспечения.
...