@frolovsky

Можно ли вернуть функцию для каждого элемента массива и вызвать в Promise.all?

У меня есть массив значений, по каждому элементу массива надо пройти и вернуть асинхронную функцию, внутри которой будет выполняться запрос на сервер (параметром является сам элемент массива). В дальнейшем я бы хотел результат обернуть в Promise.all() чтобы запросы шли параллельно. Возможно ли такое?

Мой код, который не работает:

const filePromises = filesToDelete.map((file: DocsManagerFile) => () => {
  httpService.sendDataTest(
     { data_in: { id: file.id } },
     'physdocs.delete_docs_file',
  );
});

await Promise.all(filePromises);
  • Вопрос задан
  • 73 просмотра
Решения вопроса 1
Если метод httpService.sendDataTest(...) возвращает promise, то не стоит его оборачивать в стрелочную функцию, вот так нужно:
filesToDelete.map((file: DocsManagerFile) => httpService.sendDataTest({ ... }))


А если нет, он должен принимать onsuccess и onerror кэлбеки, тогда так:
filesToDelete.map((file: DocsManagerFile) => (
  new Promise(onsuccess, onerror) => (
    httpService.sendDataTest(
       { data_in: { id: file.id } },
       'physdocs.delete_docs_file',
      // где-то тут onsuccess и onerror
    );
))));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы