int valInt = 12;
Console.WriteLine(valInt.ToString("X")); // C ~ possibly single-digit output
Console.WriteLine(valInt.ToString("X2")); // 0C ~ always double-digit output
Да, 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 => {
…
})
Вместо forEach
вы должны использовать map
:
Promise.all(urls.map(url => fetch(url)))
.then(resp => Promise.all( resp.map(r => r.text()) ))
.then(result => {
// ...
});
map
возвращает каждый результат fetch(url)
, а forEach
ничего не возвращает. См. Либо принятый ответ, либо stackoverflow.com/a/34426481/1639983 .
– Holden Lewis
25 July 2018 в 21:46
По какой-то причине ни один из примеров Берги не работал для меня. Это просто даст мне пустые результаты. После некоторой отладки кажется, что обещание вернется до того, как результат будет завершен, следовательно, будут пустые результаты.
Однако Бенджамин Груэнбаум ответил здесь ранее, но удалил его. Его метод сделал для меня , поэтому я просто скопирую его здесь, в качестве альтернативы, если кто-то еще столкнется с какими-либо проблемами с первым решением здесь.
var promises = urls.map(url => fetch(url).then(y => y.text()));
Promise.all(promises).then(results => {
// do something with results.
});
return fetch(url)
... – sansSpoon 24 April 2018 в 09:50