首页 > 解决方案 > 从异步函数返回错误和数据的更好语法

问题描述

我想知道哪种语法更适合从异步函数返回数据和错误指示符。

选项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){
}

标签: javascriptnode.jsecmascript-6

解决方案


您只需要在最顶层调用时捕获错误,例如我有服务器端点,在那里我调用了一些业务逻辑方法:

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),您可能需要捕获错误。


推荐阅读