承诺返回<pending>

时间:2018-07-02 13:39:02

标签: node.js request async-await

我已经为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 :(得分:1)

receiveWBBData是异步的。因此,test1是一个承诺。如果要记录结果,请执行test1.then(console.log).catch(console.error),如果希望在变量中使用结果,请使用var test1 = await receiveWBBData(/*...*/)。请注意,await仅可用于异步功能。

此外,正如@somethinghere所提到的,您不应抛弃承诺,而应将其退回。

答案 1 :(得分:0)

An async function always returns a promise。为了“取消”承诺,您需要await,因此,您需要var test1 = await receiveWBBData("r0b","CENSORED");

Top-level await还不是该语言的一部分,所以我建议您添加一个名为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));
相关问题