簡體   English   中英

承諾正在回歸<pending>

[英]Promise is returning <pending>

我已經為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);`

提前致謝!

receiveWBBData是異步的。 因此, test1是一個承諾。 如果要記錄結果,請執行test1.then(console.log).catch(console.error) ,或者如果希望在變量中使用結果,請使用var test1 = await receiveWBBData(/*...*/) 請注意, await只能在異步功能中使用。

另外,正如@somethinghere所提到的,您不應拋棄諾言,而應將其退還。

異步函數總是返回promise 為了“解開”承諾,您需要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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM