为什么没有必要等待数据库查询的返回

时间:2018-02-01 21:20:09

标签: javascript c# asp.net-mvc database async-await

我在典型的MVC结构中设置我的服务器。控制器中的函数要求我等待模型中的函数查询我的数据库时给出的承诺。如果查询返回一个promise,我怎么不需要等待呢?

//model - why don't I have to make this an async/ await function?
const findUser = (name) => {
  const author = User.findOne({
    where: {
      firstName: name,
    },
  });
  return author;
};

//controller
const getUser = async (ctx) => {
  ctx.body = await messages.findUser(ctx.request.body);
};

2 个答案:

答案 0 :(得分:1)

promise是一个带有语义的值的抽象,值最终可用(一个'已解决'的promise),或最终确定不会检索该值(一个'被拒绝的'promise)。

值或错误,可以通过promise的then方法的参数获得,这些方法本身是函数,其参数是值或错误,resp。这些函数定义了值在可用后如何处理。

另一方面,封装承诺立即可用,因此您无需等待它。

答案 1 :(得分:1)

User.findOne()会立即返回Promise。该承诺立即返回getUsergetUser等待的是什么。

如果您打算使用User.findOne()在<{1}}电话中解析的任何然后,您必须{{ 1 {} getUser

更简单的说,await是一个错误的变量名称。它不代表实际价值。相反,它代表了价值的承诺。您可以快速获得价值承诺。实现它们需要时间。