Web*_*san 7 javascript ajax axios
我正在使用.all方法的流行库'axios'来处理我的ajax请求.
但是如果所有请求都得到404,我怎么能处理错误呢?
例如:
axios.all([
axios.get('http://some_url'),
axios.get('http://another_url'),
])
.then(axios.spread((someUrl, anotherUrl) => {
// ... boring stuff goes there
}))
.catch(() => {
//... error goes there
});
Run Code Online (Sandbox Code Playgroud)
所以,似乎只有一个错误已被"抓住".
我怎么能抓住他们呢?或者也许有任何一种.最终?
问题(正如您已经知道的)是,catch一旦第一个承诺拒绝,您就会陷入阻塞,从而无法收集所有失败的回复catch.但是,您仍然可以手动处理失败的promise以聚合错误并在之后抛出.
检查一下这对你有用:
const promises = [
axios.get('http://some_url'),
axios.get('http://another_url'),
]
const promisesResolved = promises.map(promise => promise.catch(error => ({ error })))
function checkFailed (then) {
return function (responses) {
const someFailed = responses.some(response => response.error)
if (someFailed) {
throw responses
}
return then(responses)
}
}
axios.all(promisesResolved)
.then(checkFailed(([someUrl, anotherUrl]) => {
console.log('SUCCESS', someUrl, anotherUrl)
}))
.catch((err) => {
console.log('FAIL', err)
});
Run Code Online (Sandbox Code Playgroud)
catch如果至少有一个承诺失败,你将陷入阻碍.您可以通过检查err响应数组找到一个.
由于 Promise.all 的快速失败行为,我认为这是不可能的。如果您的任何请求失败,它们将自动成为罪魁祸首并导致捕获。
Promise.all([
Promise.reject(Error('1')),
Promise.reject(Error('2')),
Promise.reject(Error('3'))
]).then((results) => {
console.log(results)
}, (error) => {
console.log(error.message)
})
Run Code Online (Sandbox Code Playgroud)
生成的代码将始终打印 1,因为它是第一个失败的。我认为存储库上请求了类似的功能,但他们说这是不可能的。
我本来打算将此作为评论,但还没有足够高的声誉。
| 归档时间: |
|
| 查看次数: |
8737 次 |
| 最近记录: |