摘要:是一個(gè)劃時(shí)代的庫,因?yàn)楫a(chǎn)生后,后續(xù)的標(biāo)準(zhǔn)的就是基于的,而機(jī)制讓人能夠以同步樣式的代碼處理異步任務(wù),徹底解決了回調(diào)問題。而的機(jī)制其實(shí)很簡(jiǎn)單,它將異步任務(wù)抽象為三種狀態(tài)進(jìn)行中完成失敗。
NPM酷庫,每天兩分鐘,了解一個(gè)流行NPM庫。
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ù)管理庫,Promise就是最常用的一個(gè)。
PromisePromise 是一個(gè)劃時(shí)代的庫,因?yàn)镻romise產(chǎn)生后,后續(xù)的ES7標(biāo)準(zhǔn)的async/await就是基于Promise的,而async/await機(jī)制讓人能夠以同步樣式的代碼處理異步任務(wù),徹底解決了回調(diào)問題。
而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改寫后,原來的多層回調(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庫:
const Promise = require("promise");參考資料
https://developer.mozilla.org...
https://github.com/then/promise
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/92851.html
摘要:酷庫,每天兩分鐘,了解一個(gè)流行庫。是一個(gè)實(shí)現(xiàn)庫,并且相對(duì)于標(biāo)準(zhǔn),提供了很多實(shí)用的工具函數(shù)。異步處理超時(shí)設(shè)置延時(shí)執(zhí)行其他關(guān)于返回值的工具函數(shù)比如的作用是獲取返回對(duì)象的某個(gè)屬性,作用等同于這種函數(shù)有很多,具體可以查看文檔。 NPM酷庫,每天兩分鐘,了解一個(gè)流行NPM庫。 昨天我們了解了如何使用Promise管理異步任務(wù),但是ES2015標(biāo)準(zhǔn)的Promise對(duì)象實(shí)現(xiàn)的接口非常有限,只包含 P...
摘要:酷庫,每天兩分鐘,了解一個(gè)流行庫。庫是一個(gè)非常出色的異步控制庫,除了函數(shù)外,還提供了大量的其他工具函數(shù),在當(dāng)年沒有的時(shí)候,庫的作用尤為突出。 NPM酷庫,每天兩分鐘,了解一個(gè)流行NPM庫。 今天要了解的庫叫async,與ES7標(biāo)準(zhǔn)的async/await關(guān)鍵字不同,這里說的async只是NPM的一個(gè)庫,為了區(qū)別,下文中今天的主角叫async庫,async/await的關(guān)鍵字叫async...
摘要:酷庫,每天兩分鐘,了解一個(gè)流行庫。昨天我們了解到可以用庫將樣式庫轉(zhuǎn)化為樣式,同時(shí)庫也提供了強(qiáng)大在增強(qiáng)版的,如果我們需要轉(zhuǎn)化函數(shù),且僅需要使用標(biāo)準(zhǔn)的,那么使用有些大材小用。 NPM酷庫,每天兩分鐘,了解一個(gè)流行NPM庫。 所有Node.js標(biāo)準(zhǔn)庫和很多第三方庫提供的接口都是callback樣式的,在ES7標(biāo)準(zhǔn)時(shí)代,使用async/await配合Promise才是最佳實(shí)踐。 昨天我們了解到...
摘要:酷庫,每天兩分鐘,了解一個(gè)流行庫。昨天我們了解了增強(qiáng)版庫。庫實(shí)現(xiàn)了比標(biāo)準(zhǔn)更多的方法,今天我們繼續(xù)學(xué)習(xí)另一個(gè)功能強(qiáng)大的工具庫。首先,和庫一樣,也是一個(gè)增強(qiáng)版本的庫,可以直接后替換內(nèi)置。 NPM酷庫,每天兩分鐘,了解一個(gè)流行NPM庫。 昨天我們了解了增強(qiáng)版Promise庫:q。q庫實(shí)現(xiàn)了比ES2015標(biāo)準(zhǔn)更多的Promise方法,今天我們繼續(xù)學(xué)習(xí)另一個(gè)功能強(qiáng)大的Promise工具庫:blu...
摘要:酷庫,每天兩分鐘,了解一個(gè)流行庫。經(jīng)常,我們的程序需要對(duì)磁盤文件進(jìn)行管理,就需要讀取磁盤上的文件列表,然后可能會(huì)需要判斷文件夾或文件名,還可能需要遞歸掃描子目錄。今天我們要了解的庫,就是專門用來掃描磁盤文件,并返回我們需要的文件類型。 NPM酷庫,每天兩分鐘,了解一個(gè)流行NPM庫。 經(jīng)常,我們的程序需要對(duì)磁盤文件進(jìn)行管理,就需要讀取磁盤上的文件列表,然后可能會(huì)需要判斷文件夾或文件名,還...
閱讀 3940·2021-10-12 10:12
閱讀 2899·2021-09-10 11:18
閱讀 3685·2019-08-30 15:54
閱讀 2816·2019-08-30 15:53
閱讀 651·2019-08-30 13:54
閱讀 977·2019-08-30 13:21
閱讀 2270·2019-08-30 12:57
閱讀 1700·2019-08-30 11:10