使用链接 Promise.allSettled
Using Chained Promise.allSettled
快速了解我正在尝试做的事情。我有一个基本的 for
循环,它生成一个我想要获取的 IP 数组。我想检查 response.status
是否为 200(我还没有实现),然后获取返回状态为 200 的 IP 并仅保留这些 IP。
我试过用 Promise.all
这样做,但遇到了拒绝一个的问题,因此拒绝了所有的。所以现在我在这段代码。
async function example() {
var arr = [];
for (let i = 4; i <= 255; i++) {
var ip = 'http://172.16.238.' + i.toString() + ':443';
arr.push(ip);
}
Promise.allSettled(arr.map(u=>fetch(u))).then(responses => Promise.allSettled(responses.map(res => res.text()))).then(texts => {fetch('https://testing.com', {method: 'POST', body: texts})})
}
example()
我发现 res.text()
与 allSettled
一起使用时不是函数。但我也对如何检查每个响应的状态感到困惑。我将 url 映射到每个提取,然后将响应映射到它的文本,那么我会在第二个映射中进行状态检查吗?映射让我有点困惑。
allSettled
不是 return 具有解析值的数组 - 相反,它 return 是 对象 的数组,其中对象包含 status
/ value
/ reason
属性。要获取解析值,如果有,请访问 .value
属性.
但是一个 allSettled
就可以了 - 如果没有出错,在第一个回调中调用 .text
。
function example() {
var arr = [];
for (let i = 4; i <= 255; i++) {
var ip = 'http://172.16.238.' + i.toString() + ':443';
arr.push(ip);
}
Promise.allSettled(arr.map(
u => fetch(u)
.then(res => { if (res.ok) return res.text(); })
))
.then(results => {
const texts = results
.filter(result => result.status === 'fulfilled' && result.value)
.map(result => result.value);
fetch('https://testing.com', { method: 'POST', body: texts })
// ...
})
}
快速了解我正在尝试做的事情。我有一个基本的 for
循环,它生成一个我想要获取的 IP 数组。我想检查 response.status
是否为 200(我还没有实现),然后获取返回状态为 200 的 IP 并仅保留这些 IP。
我试过用 Promise.all
这样做,但遇到了拒绝一个的问题,因此拒绝了所有的。所以现在我在这段代码。
async function example() {
var arr = [];
for (let i = 4; i <= 255; i++) {
var ip = 'http://172.16.238.' + i.toString() + ':443';
arr.push(ip);
}
Promise.allSettled(arr.map(u=>fetch(u))).then(responses => Promise.allSettled(responses.map(res => res.text()))).then(texts => {fetch('https://testing.com', {method: 'POST', body: texts})})
}
example()
我发现 res.text()
与 allSettled
一起使用时不是函数。但我也对如何检查每个响应的状态感到困惑。我将 url 映射到每个提取,然后将响应映射到它的文本,那么我会在第二个映射中进行状态检查吗?映射让我有点困惑。
allSettled
不是 return 具有解析值的数组 - 相反,它 return 是 对象 的数组,其中对象包含 status
/ value
/ reason
属性。要获取解析值,如果有,请访问 .value
属性.
但是一个 allSettled
就可以了 - 如果没有出错,在第一个回调中调用 .text
。
function example() {
var arr = [];
for (let i = 4; i <= 255; i++) {
var ip = 'http://172.16.238.' + i.toString() + ':443';
arr.push(ip);
}
Promise.allSettled(arr.map(
u => fetch(u)
.then(res => { if (res.ok) return res.text(); })
))
.then(results => {
const texts = results
.filter(result => result.status === 'fulfilled' && result.value)
.map(result => result.value);
fetch('https://testing.com', { method: 'POST', body: texts })
// ...
})
}