Обещание возвращается <pending> - PullRequest
0 голосов
/ 02 июля 2018

Я написал небольшой код для http-запроса. После того, как я понял, что request является асинхронным, я переписал свой код с обещанием. Но это говорит мне, что обещание находится на рассмотрении. Я абсолютно не знаю, почему это неправильно. Вот мой код:

function verifyUser(uname,pword){
    var options = {
        url: 'CENSORED',
        method: 'POST',
        headers: headers,
        form: {'Username':uname, 'Password':pword, 'Key':key},
        json:true
    }
    return new Promise((r,j) => request(options,(error,response,body)=>{
        if(error){
            console.log("[ERROR] Promise returned error");
            throw j(error);
        }
        r(body);
    }))
} 
async function receiveWBBData(uspass,passwd){
    const data = await verifyUser(uspass,passwd);
    return data;
}

var test1 = receiveWBBData("r0b","CENSORED");
console.log(test1);`

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Асинхронная функция всегда возвращает обещание . Чтобы «развернуть» обещание, вам нужно await на нем, поэтому вам нужно var test1 = await receiveWBBData("r0b","CENSORED");.

Ожидание верхнего уровня еще не является частью языка, поэтому я рекомендую вам добавить функцию с именем main() или run() и просто вызывать ее при запуске скрипта.

async function receiveWBBData(uspass,passwd){
  const data = await verifyUser(uspass,passwd);
  return data;
}

async function main() {
  var test1 = receiveWBBData("r0b","CENSORED");
  console.log(test1);`
}

main().catch(error => console.error(error.stack));
0 голосов
/ 02 июля 2018

receiveWBBData асинхронно. Следовательно, test1 - это обещание. Если вы хотите записать результат, выполните test1.then(console.log).catch(console.error) или используйте var test1 = await receiveWBBData(/*...*/), если хотите получить результат в вашей переменной. Обратите внимание, что await может использоваться только в асинхронных функциях.

Кроме того, как уже упоминалось @somethinghere, вы не должны бросать свое обещание отказа, вы должны вернуть его.

...