乙個真實的Async Await示例

2022-01-29 15:54:58 字數 2155 閱讀 2469

譯者按:通過真實的**示例感受async/await的力量。

既然node.js 8已經lts了,我想大家是時候試一試async/await特性了,真的很好用!它可以幫助我們用同步的方式寫非同步**,極大地提高了**的可讀性。在過去的2年時間裡,promise給我們帶來了不少便利,同時也讓我們有一些失望。

這邊部落格,我將介紹乙個真實的**示例,它是乙個rest api的controller。通過展示我們如何從promise切換到async/await,你講能夠體會到async/await的神奇之處!

下面是我的工作專案中真實的controller**:

const bpromise = require('bluebird');

const = require('./../errors');

/*** emulate an express.js route call as an example

*/logincontroller({}, , null)

function logincontroller (req, res, err) = req;

let user;

bpromise.try(() => validateuserinput(req))

.then(() => fetchuserbyemail(email))

.then(fetcheduser => user = fetcheduser)

.then(() => comparepasswords(req.password, user.password))

.then(() => markloggedintimestamp(user.userid))

.then(() => sendemail(user.userid))

.then(() => generatejwt(user))

.then(token => res.json())

.catch(wrongcredentialserror, () => res.json())

.catch(emailerror, dbconnectionerror, () => res.json())

.catch(() => res.json())

}/**

* validate input from request

** @param input

* @throws

* @returns

*/function validateuserinput(input)

}/**

* fetch a user from the db by email

** @throws wrongcredentialserror

* @throws dbconnectionerror

* @returns

*/function fetchuserbyemail(email)

return new bpromise(resolve => resolve(user));

}/**

* compare two password

** @param inputpwd

* @param storedpwd

* @throws

* @returns

*/function comparepasswords(inputpwd, storedpwd)

}/**

* hash password

** @param password

* @returns

*/function hashpassword(password)

/*** mark a user's logged in timestamp

** @param userid

* @throws dbconnectionerror

* @returns

*/function markloggedintimestamp(userid)

/*** send a follow up email

** @param userid

* @throws emailerror

* @returns

*/function sendemail(userid)

如何實現乙個async await

async的執行原理 其實就是自動執行generator函式 暫時不考慮genertor的編譯步驟 更複雜 const getdata newpromise resolve settimeout resolve data 1000 這樣的乙個async函式 應該再1秒後列印data async fu...

乙個真實的社會

女生們寧肯做高帥富的備胎,也不肯接受屌絲的行為,從基因上保證了人類的進步 如果你磨練自己,成為乙個多金 風趣 成熟的男人,自然會有妹子傾心於你 在激烈的社會競爭中,細膩敏感,脆弱的年輕人逐漸在社會選擇中被淘汰 只有擁有找男女朋友的能力和很多備胎,才能真正享受單身生活 以前覺得靠關係的人一定很無能。接...

乙個真實的招聘資訊

別人發給我看的 我轉到這裡,笑乙個 編號 30262 發布位置 職位庫 發布日期 2007 4 17 21 36 46 檢視該公司全部招聘職位 基 本 信 息 職位類別 計算機 網路 技術類 工作地點 河北省,石家莊市 招聘名額 1人職務性質 全職最低學歷 本科專業要求 軟體程式設計 年齡要求 22...