javascript - 从异步函数返回错误和数据的更好语法
问题描述
我想知道哪种语法更适合从异步函数返回数据和错误指示符。
选项1:
dailyTasks.doSomething = async function () {
try {
doSomethingHere();
return [null, {
status: 'done'
}]
} catch (e) {
return [e, null];
}
};
然后对该函数的调用将是:
const [error, data] = await dailyTasks.doSomething();
if (error){
}
选项 2:
dailyTasks.doSomething = async function () {
try {
doSomethingHere();
return {
error: null,
data: {
status: 'done'
}
};
} catch (e) {
return {
error: e,
data: null
};
}
};
然后对该函数的调用将是:
const {error, data} = await dailyTasks.doSomething();
if (error){
}
解决方案
您只需要在最顶层调用时捕获错误,例如我有服务器端点,在那里我调用了一些业务逻辑方法:
router.post('/', async (req, res) => {
try {
const result = await myBusinessFunction();
res.status(200).send(result);
} catch (err) {
console.error(err);
res.status(500).send('internal server error');
}
})
没有在 myBusinessFunction 的任何后续调用中捕获错误,仅在端点中。如果您调用 3d 方库以控制其错误代码,或者如果您引入单独的上下文(如使用 setTimeout、setInterval),您可能需要捕获错误。
推荐阅读
- airflow - 如何从同一 DAG 运行中的其他任务实例中提取 xcom 值(不是最新的)?
- sql - 使用 xmllagg 的子查询错误和太多值
- angular - 运行 AoT 会改变布局
- c++ - 自动推断添加数组的类型
- javascript - 获取 chrome 开发工具网络选项卡值
- python - 如何搜索特定文件,Python 2,Tkinter
- javascript - 我不希望 datetimepicker 在点击时设置默认值
- swift - UIStackView 等间距,包括边缘
- php - 如何通过php将csv(分号分隔)导入mysql?
- c++ - 如何修复私有静态成员中的错误?