Каков поток кода в обещании и порядке их выполнения? - PullRequest
0 голосов
/ 29 апреля 2019

В приведенном ниже коде в Promise есть три вызова функций. Как выполняются эти функции; параллельно или последовательно?

return Promise.all([
  getUserData({ req }),
  getNetworkServiceCountsData({ req }),
  getShelfServiceCountsData({ req }),
])

Ответы [ 2 ]

1 голос
/ 29 апреля 2019

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

Итак, первая функция запускает запрос и возвращает обещание, затем вторая функция делает то же самое, а затем третья. Затем у нас есть три неразрешенных обещания, которые передаются в Promise.all, что также возвращает неразрешенное обещание.

Затем начинается ожидание ...

Обработка этих асинхронных запросов может происходить на другом уровне, возможно, даже на другом сервере, в некоторой базе данных или веб-службе. Как правило, такая обработка может быть параллельной, поскольку она не ограничена однопоточным механизмом JavaScript. Эта обработка в конечном итоге приводит к событию в очереди событий JavaScript. Прослушиватели событий, о которых я упоминал ранее, вызываются циклом событий JS, и эти обработчики разрешают соответствующие обещания.

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

Но когда все три обещания разрешены (независимо от порядка их разрешения), обещание, возвращенное Promise.all, также разрешится.

Итак, да, все будет работать параллельно, но не код JavaScript.

0 голосов
/ 29 апреля 2019

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

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

Вы можете найти ссылки ниже для лучшего понимания:

https://medium.com/@muralikv/implementing-promise-all-in-javascript-732076497946

Promise.all: Порядок разрешенных значений

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