Да, Promise.all
- правильный подход, но вам действительно нужно его дважды, если вы хотите сначала fetch
указать все URL-адреса, а затем получить все text
s от них (что опять-таки является обещанием для тела ответа ). Поэтому вам нужно будет
Promise.all(urls.map(fetch)).then(responses =>
Promise.all(responses.map(res => res.text())
).then(texts => {
…
})
. Ваш текущий код не работает, потому что forEach
ничего не возвращает (ни массив, ни обещание).
Конечно, вы можете упростить это и начать с получения тела от каждого ответа сразу после выполнения соответствующего обещания выборки:
Promise.all(urls.map(url =>
fetch(url).then(resp => resp.text())
)).then(texts => {
…
})
Если единственная проблема, с которой вы сталкиваетесь с типами, это методы jest, то вам обязательно стоит взглянуть на ts-jest . Это позволит вам создать конфигурацию jest, которая заставит jest запускать машинописный код в качестве препроцессора кода и будет строго вводить методы jest.
Отказ от проверки типов для тестов поначалу кажется заманчивым, но я лично обнаружил много ошибок в вызовах своих функций или даже в коде приложения, когда прекратил их исключать.