node?NPM庫promise?異步任務狀態(tài)管理
NPM酷庫
每天兩分鐘,了解一個流行NPM庫。
JavaScript的優(yōu)勢就在于其基于異步事件模型,從而Node.js能夠擁有非常強大的性能表現(xiàn)。但是,JavaScript的callback方式做異步處理,多層級情況下對人而言簡直是噩夢,故而稱之為回調地域:
Model.count(filters, (error, count) => { if(error) { console.error(error); } else { Model.find(filters, (error, result) => { if(error) { console.error(error); } else { // ... } }) } })
上述代碼中,僅僅包含兩層回調,在實際開發(fā)中,經常會遇到處理涉及七八層回調的情況,可以想象多么恐怖,針對這種情況,產生了一系列的異步任務管理庫,Promise就是最常用的一個。
Promise
Promise 是一個劃時代的庫,因為Promise產生后,后續(xù)的ES7標準的async/await就是基于Promise的,而async/await機制讓人能夠以同步樣式的代碼處理異步任務,徹底解決了回調問題。
而Promise的機制其實很簡單,它將異步任務抽象為三種狀態(tài)Pending(進行中)、Fulfilled(完成)、Rejected(失敗)。
針對上文中的代碼,用Promise方式可以寫成:
Model.count(filters) .then((count)=>{ return Model.find(filters); }) .then((results)=>{ // ... }) .catch((error)=>{ console.error(error) });
用Promise改寫后,原來的多層回調會被“拉扁”成1~2層,形成一個鏈狀調用。當然前提是上述的Model.find()
和Model.count()
得支持Promise方式調用,如果不支持,我們可以將一個callback方式的函數(shù)轉換成Promise樣式:
function find(filters){ return new Promise((resolve,reject)=>{ Model.find(filters,(error,results)=>{ if(error){ reject(error); }else{ resolve(results); } }); }); }
上述代碼中find()
函數(shù)返回了一個Promise對象,遺憾的是某些古老的瀏覽器沒有內置Promise對象,那么我們可以使用promise庫:
const Promise = require('promise');
參考資料
https://developer.mozilla.org...
https://github.com/then/promise
以上就是node NPM庫promise 異步任務狀態(tài)管理的詳細內容,更多關于node NPM庫promise 的資料請關注腳本之家其它相關文章!
相關文章
解決使用node命令提示:'node'不是內部或外部命令,也不是可運行的程序
最近在工作中遇到了個常見的問題,分享給大家,這篇文章主要給大家介紹了關于如何解決使用node命令提示:'node'不是內部或外部命令,也不是可運行的程序的相關資料,需要的朋友可以參考下2023-02-02用node-webkit把web應用打包成桌面應用(windows環(huán)境)
這篇文章主要介紹了windows環(huán)境下用node-webkit把web應用打包成桌面應用的教程,需要的朋友可以參考下2018-02-02Node.JS使用Sequelize操作MySQL的示例代碼
Node.JS提供了操作數(shù)據庫的基礎接口,本篇文章主要介紹了Node.JS使用Sequelize操作MySQL的示例代碼,具有一定的參考價值,有興趣的可以了解一下2017-10-10