簡體   English   中英

異步/等待從 Promise 返回變量

[英]Async/Await on return variable from promise

我已經進入了在我的 aws nodejs lambda 函數中使用 async await 的模式,我遇到的常見問題是需要等待承諾的結果並在下一個 async/await 承諾中使用響應,等等重復這個模式,直到我運行了我所有的邏輯。

let userId;
await GetUserId({AccessToken: headers.accesstoken}).then(function(res){
 userId = res;
},function(err){

});

let username;
await GetUserName(userId).then(function(res){
 username = res;
},function(err){

});

無論如何我可以在調用函數的同一行中聲明和分配 userId 一個值。

須藤代碼:

let userId = await GetUserId().then(()=>{ //冒泡響應直到 userId })

我問的原因是它只是有點混亂/錯誤地單獨初始化一個變量。 也許我需要一個不同的模式,或者這只是我不得不忍受的東西。

解決方案

 var ExampleFunction = async() => { try { const userId = await GetUserId('token'); const username = await GetUserName(userId); console.log(`userId: ${userId}`); console.log(`username: ${username}`); } catch (err) { console.log(err); console.log(`Exit Function`); } function GetUserId(token) { return new Promise(function(resolve, reject) { if (!token) reject('no token'); resolve('ID'); }); } function GetUserName(userId) { return new Promise(function(resolve, reject) { if (!userId) reject('no userId'); resolve('NAME'); }); } } ExampleFunction();

await應該替換then語法(除非你真的需要用 it 區分實現和拒絕)。 await表達式要么拋出拒絕原因作為要捕獲的異常,要么導致承諾的履行值。 您可以直接使用它:

const userId = await GetUserId({AccessToken: headers.accesstoken});
const username = await GetUserName(userId);

(我認為您當前的代碼忽略錯誤並繼續使用undefined值是無意的)。

關鍵字 await 使 JavaScript 等待直到該承諾解析並返回其結果。

 let userId = await GetUserId({AccessToken: headers.accesstoken});

如果您將 await 的結果分配給 var 它將是承諾解析值

這樣你就可以

let userId = await GetUserId({AccessToken: headers.accesstoken});

let username = await GetUserName(userId);

附注。 不要忘記使用 try/catch 進行錯誤處理。

暫無
暫無

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

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