node?NPM庫(kù)promise?異步任務(wù)狀態(tài)管理
NPM酷庫(kù)
每天兩分鐘,了解一個(gè)流行NPM庫(kù)。
JavaScript的優(yōu)勢(shì)就在于其基于異步事件模型,從而Node.js能夠擁有非常強(qiáng)大的性能表現(xiàn)。但是,JavaScript的callback方式做異步處理,多層級(jí)情況下對(duì)人而言簡(jiǎn)直是噩夢(mèng),故而稱之為回調(diào)地域:
Model.count(filters, (error, count) => {
if(error) {
console.error(error);
} else {
Model.find(filters, (error, result) => {
if(error) {
console.error(error);
} else {
// ...
}
})
}
})上述代碼中,僅僅包含兩層回調(diào),在實(shí)際開發(fā)中,經(jīng)常會(huì)遇到處理涉及七八層回調(diào)的情況,可以想象多么恐怖,針對(duì)這種情況,產(chǎn)生了一系列的異步任務(wù)管理庫(kù),Promise就是最常用的一個(gè)。
Promise
Promise 是一個(gè)劃時(shí)代的庫(kù),因?yàn)镻romise產(chǎn)生后,后續(xù)的ES7標(biāo)準(zhǔn)的async/await就是基于Promise的,而async/await機(jī)制讓人能夠以同步樣式的代碼處理異步任務(wù),徹底解決了回調(diào)問(wèn)題。
而Promise的機(jī)制其實(shí)很簡(jiǎn)單,它將異步任務(wù)抽象為三種狀態(tài)Pending(進(jìn)行中)、Fulfilled(完成)、Rejected(失敗)。

針對(duì)上文中的代碼,用Promise方式可以寫成:
Model.count(filters)
.then((count)=>{
return Model.find(filters);
})
.then((results)=>{
// ...
})
.catch((error)=>{
console.error(error)
});用Promise改寫后,原來(lái)的多層回調(diào)會(huì)被“拉扁”成1~2層,形成一個(gè)鏈狀調(diào)用。當(dāng)然前提是上述的Model.find()和Model.count()得支持Promise方式調(diào)用,如果不支持,我們可以將一個(gè)callback方式的函數(shù)轉(zhuǎn)換成Promise樣式:
function find(filters){
return new Promise((resolve,reject)=>{
Model.find(filters,(error,results)=>{
if(error){
reject(error);
}else{
resolve(results);
}
});
});
}上述代碼中find()函數(shù)返回了一個(gè)Promise對(duì)象,遺憾的是某些古老的瀏覽器沒有內(nèi)置Promise對(duì)象,那么我們可以使用promise庫(kù):
const Promise = require('promise');參考資料
https://developer.mozilla.org...
https://github.com/then/promise
以上就是node NPM庫(kù)promise 異步任務(wù)狀態(tài)管理的詳細(xì)內(nèi)容,更多關(guān)于node NPM庫(kù)promise 的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Node.js折騰記一:讀指定文件夾,輸出該文件夾的文件樹詳解
這篇文章主要介紹了Node.js讀指定文件夾輸出該文件夾文件樹,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
node將geojson轉(zhuǎn)shp返回給前端的實(shí)現(xiàn)方法
這篇文章主要介紹了node將geojson轉(zhuǎn)shp返回給前端的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
詳解nodejs實(shí)現(xiàn)本地上傳圖片并預(yù)覽功能(express4.0+)
本篇文章主要介紹了nodejs實(shí)現(xiàn)本地上傳圖片并預(yù)覽功能(express4.0+) ,具有一定的參考價(jià)值,有興趣的可以了解一下2017-06-06
Public?Npm?Registry模塊使用方式實(shí)例
這篇文章主要為大家介紹了Public?Npm?Registry的使用方式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
node.js中的http.response.addTrailers方法使用說(shuō)明
這篇文章主要介紹了node.js中的http.response.addTrailers方法使用說(shuō)明,本文介紹了http.response.addTrailers的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12
Express之get,pos請(qǐng)求參數(shù)的獲取
本篇文章主要介紹了Express之get,pos請(qǐng)求參數(shù)的獲取的相關(guān)知識(shí),具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-05-05
詳解node-ccap模塊生成captcha驗(yàn)證碼
本篇文章主要介紹了node-ccap模塊生成captcha驗(yàn)證碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07
Nodejs讀取本地json文件,輸出json數(shù)據(jù)接口方式
這篇文章主要介紹了Nodejs讀取本地json文件,輸出json數(shù)據(jù)接口方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10

