(如果标题不正确,请原谅我这令人困惑) 我的应用程序要求我对照数据库检查请求中的值。为此,我创建了一个异步函数来查询数据库:
async function checktoken(){
return prisma.$exists.invalidtoken({token: "testtoken"}).then(result => {
return(result)
})
}
我知道数据库调用本身是可行的:
prisma.$exists.invalidtoken({token: "testtoken"}).then(result => {
console.log(result) // returns true
})
在每次请求都触发的函数中,我尝试调用checktoken():
async function getUser(token){
var promise = await checktoken()
var result = promise
console.log(result) //undefined
};
修改该函数以包括对数据库的显式调用是有效的,但前提是必须先定义var promise = await checktoken()
:
async function getUser(token){
var promise = await checktoken() //When this is removed result1 is undefinded
await prisma.$exists.invalidtoken({token: "testtoken"}).then(result1 => {
console.log("inside db call: "+result1) // true
})
};
我认为我对async / await有一个基本的误解,但是我不确定我到底缺少什么。
编辑: 我已经按照收到的建议更新了方法,但仍然无法正常工作。我开始认为我的ORM正在做一些奇怪的事情:
async function test(token) {
const status = await prisma.$exists.invalidtoken({ token: token });
console.log(status);
return status;
}
test("123") //logs false (as it should)
async function getUser(token){
var status = await test(token) //logs undefined
console.log(status) //logs undefined
};
答案 0 :(得分:1)
异步功能需要等待。如果您使用的是promise.then()技术,那么您想要做的就是返回一个新的Promise(),然后在.then回调函数中解析promise
function checktoken() {
return new Promise((resolve,reject) => {
prisma.$exists.invalidtoken({token: "testtoken"}).then(result => {
doSomeOtherStuff();
resolve(result);
});
});
}
在功能上与
相同async checktoken() {
await prisma.$exists.invalidtoken({token: "testtoken"});
}