正确的async / await函数语法?

时间:2017-12-08 21:05:04

标签: javascript asynchronous apollo

我已经定义了resolversMap,我需要使用async / await,因为我正在执行数据库请求。我没有使用正确的语法:

const resolvers = {
  Mutation: {
    signinUser: (root, { username, password }) => {
      const db = DB.getDB()
      const Users = db.collection('users')
      const user = Users.findOne({ username: username })
    }
  }
}

我试过了:

const resolvers = {
  Mutation: {
    async signinUser: (root, { username, password }) => {
      const db = DB.getDB()
      const Users = db.collection('users')
      const user = await Users.findOne({ username: username })
    }
  }
}

更新

如果我定义这样的函数,它会起作用:

async signinUser (obj, args) {}

但这与signinUser: (obj, args) => {}之间的区别是什么?

3 个答案:

答案 0 :(得分:1)

您的语法很接近,但实际上您需要在箭头函数前面声明async

const resolvers = {
  Mutation: {
    signinUser: async (root, { username, password }) => {
      const db = DB.getDB()
      const Users = db.collection('users')
      const user = await Users.findOne({ username: username })
    }
  }
}

关于async signinUser (obj, args) {}为什么有效的问题,这是以下的ES6速记:

signinUser: async function signinUser(obj, args) {}

请参阅有关对象初始化程序的this post(具体来说,请查看新的ES2015语法)

答案 1 :(得分:0)

您必须使用async signinUser (obj, args) => {}定义该函数,因为它不再是正常函数。异步函数返回一个promise,而一个普通函数返回你返回的内容。

如果未设置为异步,则javascript会在其中禁用async xyz()

答案 2 :(得分:0)

signinUser: (obj, args) => {},您将拥有相同的背景信息,请参阅=>,搜索arrow function