gpt4 book ai didi

javascript - 使用 Promise 发送多个 API 请求

转载 作者:行者123 更新时间:2023-11-29 18:43:34 25 4
gpt4 key购买 nike

如何发送多个API请求?所以我在下面有这段代码

 const productID= [12, 43, 65, 87, 45, 76, 87];
productID.map(id => {
API.removeItem(id, (err, response) => {
if (response.status === 'success') {
console.log('remove a product');
}else {
console.log(err);
}
})
})

问题在于它不会等待第一个 API 请求完成并取回响应,而只会删除一个项目。所以基本上我希望它成为同步的,这就是为什么我使用 async await 来解决我的问题。

async function removeProducts() {
const productID = [12, 43, 65, 87, 45, 76, 87];
const result = await Promise.all(productID.map(id => {
API.removeItem(id, (err, response) => {
if (response.status === 'success') {
console.log('remove a product');
}else {
console.log(err);
}
});
}));
}

此结果与第一个代码片段几乎相同,但这次它能够删除 2 个产品项。我希望仅在上一个请求完成后才发出下一个请求。我该怎么做?

最佳答案

您第二次尝试的问题是 Promise.all() 将一组 promise 作为参数。 Promise.all() 函数还返回一个 promise 本身,当传入的数组中的每个 promise 都已解析时,该 promise 将被解析。

array.map 不返回 promise ,它返回一个新数组,其中包含使用提供的函数调用的数组中每个项目的结果。阅读有关 map 功能的更多信息 here .

而是为返回 promise 的 API 调用创建包装器函数。


const productID = [12, 43, 65, 87, 45, 76, 87];

let removeProductID = (id) => {
return new Promise((resolve, reject) => {
API.removeItem(id, (err, response) => {
if (response.status === 'success') {
console.log('remove a product');
resolve(response);
} else {
console.log(err);
reject(err);
}
})
});
}

let removeAllProductIDs = async () => {
for(let id of productID) {
await removeProductID(id);
}
}

removeAllProductIDs();

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

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