[英]Some API calls get failed when i make multiple calls(around 12) using Promise.all
我想打多个 API 电话。 通话次数为 12,我正在使用 Promise.all 方法。 但问题是一些呼叫失败。 失败的呼叫次数不固定。 有时是 4 次,有时是 2 次或 6 次。但是当我过去只打 5 次电话时它工作正常。 任何人都可以帮助解决什么问题。 这是我的代码:
const getReturnData = async (item) => {
const res = await axios.get(`${BASE_URLS.signupBaseUrl}/mutual-funds/nav/${item}`)
return res;
}
const sample = ['call1', 'call2', 'call3', 'call4', 'call5', 'call6', 'call7', 'call8', 'call9', 'call10', 'call11', 'call12']
useEffect(() => {
let promises = sample.map(item => {return getReturnData(item)})
axios.all(promises).then(values => {
setReturnData(values.map(item => item));
}).catch(err => {
setReturnData([])
throw err
})
},[])
这是因为如果在迭代 promise 对象期间存在 reject() 调用, Promise.all() 将失败。
这是一个简单的例子
var p1 = new Promise((resolve, reject) => {
setTimeout(() => {
reject("p1");
}, 100);
});
var p2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("p2");
}, 100);
});
var p3 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("p3");
}, 100);
});
Promise.all([p1, p2, p3]).then(response=> {
console.log("Success", response);
}).catch(err => {
console.log("Fail", err);
})
上面的控制台日志将是“失败,p1”,因为 Promise 对象之间存在异常。
因此,您需要单独捕获 API 调用的异常,以便发出所有 API 请求。
const getReturnData = (item) => {
return axios.get(`${BASE_URLS.signupBaseUrl}/mutual-funds/nav/${item}`).then(response => { return response; }).catch(err => { //handle error here });
}
...
我不习惯 async-await 但这应该可以
const sample = ['call1', 'call2', 'call3', 'call4', 'call5', 'call6', 'call7', 'call8', 'call9', 'call10', 'call11', 'call12']
useEffect(() => {
let promises = sample.map(item => {
return new Promise((resolve, reject) => {
try {
const res = axios.get(`${BASE_URLS.signupBaseUrl}/mutual-funds/nav/${item}`)
resolve(res)
} catch (err) {
reject(err);
}
})
})
Promise.all(promises).then(values => {
setReturnData(values.map(item => item));
}).catch(err => {
setReturnData([])
throw err
})
}, [])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.