javascript - 关于捕获错误的异步和等待和 promise

标签 javascript promise async-await ecmascript-2017

我有一个关于在异步和等待中捕获用户错误的问题。

假设我有一个只为单个用户获取的路由。

路由.js

routes.get('/getuserbyid/:id', (req, res) => {

    const id = req.params.id;

    accountController.getById(id)
        .then((result) => {
            res.json({
                confirmation: 'success',
                result: result
            });
        })
        .catch((error) => {
            res.json({
                confirmation: 'failure',
                error: error
            });
        });
});

我有一个 Controller 来获取请求。 账户 Controller .js

export const getById = async (id) => {

        try {
            const user = await users.findOne({ where: {
                    id: id
                }});

            if (user === null) {
                return 'User does not exist';
            }
            return user;
        } catch (error) {
            return error;
        }
}

所以无论发生什么,我都会得到一个空记录或一个记录。它仍然是成功的。 在 promise 中,我可以拒绝 null,因此它会出现在路由的 catch block 中。现在有了异步和等待。我怎样才能在错误 block 中实现相同的空值?

export const getById = (id) => {

    return new Promise((resolve, reject) => {

        users.findOne({ where: {
            id: id
        }})
            .then((result) => {

                if (result === null) {
                    reject('User does not exit');
                }
                resolve(result);
            })
            .catch((error) => {
                reject(error);
            });
    });

}

最佳答案

首先,避免 Promise 反模式。您有一个返回 Promise 的函数,无需将其包装在 new Promise() 中。

然后你的函数看起来像这样:

export const getById = (id) => {
  return users.findOne({ where: { id } })
    .then((user) => {
      if (user === null)
        throw 'User does not exit';

      return user;
    });
}

这是异步/等待版本

export const getById = async (id) => {
  const user = await users.findOne({ where: { id } });

  if(user === null)
    throw 'User does not exist';

  return user;
}

关于javascript - 关于捕获错误的异步和等待和 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48694259/

相关文章:

javascript - Promise 异常行为,执行顺序

c# - Task.WaitAll 死锁

javascript - 在 Node.js 中使用 Q Promise 循环

asp.net - 是否使用 TPL 或 async/await

c# - 在直接从调用另一个库返回任务的库中使用 ConfigureAwait(false) 是否有利?

javascript - 我如何才能使外部文件中的 javascript 仅适用于 PHP 文件内的 div 中的图像?

javascript - React.js 中的 setInterval 不应用背景图像样式

javascript - 在后台加载第二个网页以从此网页获取内容

javascript - IE6 Try/Catch block 不适用于自定义 document.someFunction 调用

javascript - Sequelize promise 在解决之前是否等待 postgres 触发器完成?