JavaScript: Что произойдет в цепочке обещаний, если одна функция в середине ничего не возвращает, но все еще выполняет асинхронную операцию? - PullRequest
0 голосов
/ 15 декабря 2018

При связывании обещаний в Javascript, что произойдет, если одна функция в середине цепочки ничего не возвращает, но все же выполняет асинхронную операцию, которую необходимо выполнить перед продолжением?

Делает ли следующий 'then () 'дождаться разрешения предыдущей асинхронной функции, даже если ей не переданы никакие значения?

EDIT: вот пример приложения:

connectDatabase()
  .then(() => createTables())
  .then(() => fillTables())
  .then(() => selectTables)
  .then(tables => showTables());

ThisКод просто представляет создание базы данных SQLite и некоторые дальнейшие операции для окончательного отображения значений таблицы.

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

Функция createTables() создает несколько таблиц асинхронно, а по завершении ничего не возвращает и следующая функцияможно вызвать.

selectTables() просто использует команду sql SELECT для хранения значений таблицы в переменной и возвращает ее следующей функции.

showTables() использует значения таблицыэто передается ему и отображается на экране.

1 Ответ

0 голосов
/ 15 декабря 2018

Если функция в цепочке обещаний разрешает значение, то следующая функция в цепочке будет иметь доступ к разрешенному значению.Например, в вашем примере, если createTables разрешило значение, то это разрешенное значение будет доступно следующей функции в цепочке в качестве аргумента (в данном случае (resolvedValue) => fillTables()).

Если это не такне разрешить значение (просто вызывает resolve() без аргументов или просто не возвращает значение в случае функции async), тогда следующее обещание в цепочке просто не получит никаких аргументов.

Таким образом, да, следующий then всегда будет ждать разрешения предыдущего обещания (независимо от того, разрешается оно со значением или нет).

РЕДАКТИРОВАТЬ: Удалена / исправлена ​​первая часть моего ответа на основена отзыв Леннхольма (спасибо!).then по умолчанию вернет обещание, так что всегда будет then-able.Если функция обратного вызова, переданная затем, возвращает обещание, то обещание then будет преобразовано в значение, которое разрешает обратный вызов;если обратный вызов не возвращает обещание, то then просто разрешит значение, возвращаемое обратным вызовом.

Для получения дополнительной информации об этом, получите следующий ответ: https://stackoverflow.com/a/46142909/815086

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...