Вызов асинхронной функции из асинхронной функции возвращает неопределенное - PullRequest
2 голосов
/ 20 апреля 2019

(Простите, если заголовок не соответствует проблеме, этот вопрос ошеломляет) Мое приложение требует, чтобы я проверил значение из запроса в базе данных.Для этого я создал асинхронную функцию для запроса к базе данных:

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 
})

В функции, которая запускается при каждом запросе Iпопробуйте вызвать 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
};

1 Ответ

1 голос
/ 20 апреля 2019

Асинхронная функция требует ожидания.Если вы используете технику обещания.такой же как

async checktoken() {
    await prisma.$exists.invalidtoken({token: "testtoken"});
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...