gpt4 book ai didi

javascript - 使用带有 Promise 的多个请求

转载 作者:行者123 更新时间:2023-12-01 03:35:56 25 4
gpt4 key购买 nike

我正在尝试使用 request-promise 模块来检查多个网站。如果我按照设计使用 Promise.all,promise 将返回并首先拒绝。执行多个请求任务并等待所有请求完成(无论它们是满足还是拒绝)的正确方法是什么?我想出了以下两个功能。

CheckSitesV1 由于一个被拒绝的 promise 而返回异常。然而 CheckSitesV2 等待所有 promise 完成,无论它们是被履行还是被拒绝。如果您能评论我编写的代码是否有意义,我将不胜感激。我使用的是 NodeJS v7.9.0

const sitesArray = ['http://www.example.com','https://doesnt-really-exist.org','http://www.httpbin.org'];

async function CheckSitesV1() {
let ps = [];
for (let i = 0; i < sitesArray.length; i++) {
let ops = {
method: 'GET',
uri:sitesArray[i],
};
const resp = await rp.get(ops);
ps.push(resp);
}
return Promise.all(ps)
}

function CheckSitesV2() {
let ps = [];
for (let i = 0; i < sitesArray.length; i++) {
let ops = {
method: 'GET',
uri:sitesArray[i],
};
ps.push(rp.get(ops));
}
return Promise.all(ps.map(p => p.catch(e => e)))
}

CheckSitesV1().then(function (result) {
console.log(result);
}).catch(function (e) {
console.log('Exception: ' + e);
});

CheckSitesV2().then(function (result) {
console.log(result);
}).catch(function (e) {
console.log('Exception: ' + e);
});

最佳答案

你的

function CheckSitesV2() {
let ps = [];
for (let i = 0; i < sitesArray.length; i++) {
let ops = {
method: 'GET',
uri:sitesArray[i],
};
ps.push(rp.get(ops));
}
return Promise.all(ps.map(p => p.catch(e => e)))
}

完全没问题。我只能建议重构一点以提高可读性:

function CheckSitesV2() {
let ps = sitesArray
.map(site => rp.get({method: 'GET', uri: site}).catch(e => e));

return Promise.all(ps);
}

关于异步试试这个

async function CheckSitesV1() {
let results = [];
for (let i = 0; i < sitesArray.length; i++) {
let opts = {
method: "GET",
uri: sitesArray[i]
};
const resp = await rp.get(opts).catch(e => e);
results.push(resp);
}
return results;
}

CheckSitesV1().then(console.log)

关于javascript - 使用带有 Promise 的多个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44294280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com