我已经定义了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) => {}
之间的区别是什么?
答案 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