javascript - 使用并行异步请求处理错误
问题描述
我有 6 个异步请求。如果其中一个出错,返回 404,其他请求也不起作用。我async.parallel
用来提出这些要求。当其中一个请求失败时,我正在尝试提出其他请求。但我做不到。
这是我的代码:
async.parallel({
request1: async (callback) => {
const [err, result] = await to(this.$store.dispatch('myAction1', {
id: this.$route.params.id,
}));
callback(err, result);
},
request2: async (callback) => {
const [err, result] = await to(this.$store.dispatch('myAction2', {
params: {
id: this.$route.params.id,
page: this.page,
size: this.size,
},
}));
callback(err, result);
},
request3: async (callback) => {
const [err, result] = await to(this.$store.dispatch('myAction3', {
data: {
filters: this.inputs.filters,
projections: this.inputs.projections,
showTotalCount: this.inputs.showTotalCount,
},
params: {
page: this.page,
size: this.size,
},
}));
callback(err, result);
},
request4: async (callback) => {
const [err, result] = await to(this.$store.dispatch('myAction4'));
callback(err, result);
},
request5: async (callback) => {
const [err, result] = await to(this.$store.dispatch('myAction5', {
id: this.$route.params.id,
}));
callback(err, result);
},
request6: async (callback) => {
const [err, result] = await to(this.$store.dispatch('myAction6', {
params: {
id: this.$route.params.id,
},
}));
callback(err, result);
},
}, (err, results) => {
if (err) {
// Show error message when one of them fails
}
// doing something when all requests success and hide the page loader.
this.hidePageLoader();
});
如果这些请求中的一个返回 404,则此代码始终显示页面加载器,我想将失败的请求传递null
给我的results
对象或返回其他结果,而对象中的请求没有失败results
。我怎样才能正确地做到这一点
解决方案
即使其他任务失败,其余任务也能继续处理,您需要将任务推送到包含每个任务的数组中,并将任务async.reflect
数组设置为async.parallel
.
例如:
async.parallel([
async.reflect((callback) => {
return callback(null, "one");
}),
async.reflect((callback) => {
return callback("error");
}),
// another tasks
], function(error, results) {
if(error)
return cb(error)
// results[0].value ->> "one"
// results[1].error ->> "error"
return cb(results)
})
来源:异步文档 utils
>> reflect
推荐阅读
- jsrender - JsViews:使用深拷贝对象重新初始化模板:~root 问题
- c - 尝试写入结构数组的元素时出现分段错误
- cron - Cron - 每个星期天,除非是每月的第一天
- eclipse-jdt - 用于测试编译 Eclipse+Maven 的 Micronaut 注释处理器不起作用
- parameters - 当我调用一个函数调用的函数比我输入的参数多时会发生什么
- sql - 只包括有字母的记录,忽略列中有数字的记录
- opengl - OpenGL:alpha-to-coverage 交叉淡入淡出
- pandas - 如何让 pandas 为交叉乘法工作
- machine-learning - 这些点在朴素贝叶斯中意味着什么?
- android - 在 Jetpack Compose 中使用自定义视图