promise.js實現nodejs的promises庫
本章節分享一段程式碼,是由promise.js實現的nodejs的promises庫,希望能夠給需要的朋友帶來幫助。
promise是由javascript實現的輕量級的框架,此框架可以讓程式設計人員從紛亂複雜的非同步回撥中抽出精力來,集中於業務邏輯方面的工作。但是在預設狀態下,promise.js並不能夠直接用於node.js,下面就是將其進行封裝整合一下,將其實現為node.js下的一個框架。
程式碼如下:
[JavaScript] 純文字檢視 複製程式碼(function(){ var Promise = exports.Promise = function(){ this._callbacks = []; }; Promise.prototype.then = function(func, context){ //處理回撥結果的方法 function doCallbackResults(r) { if (r instanceof Promise) { r.then(function(err, values){ p.done(err, values); }); } else { p.done(null, r); } } var p = new Promise(); if (this._isdone) { var results = func.apply(context, this.results); doCallbackResults(results); } else { this._callbacks.push(function(){ var results = func.apply(context, arguments); doCallbackResults(results); }); } return p; }; Promise.prototype.done = function(){ this.results = arguments; this._isdone = true; for (var i=0; i<this._callbacks.length; i++) { this._callbacks[i].apply(null, arguments); } this._callbacks = []; }; Promise.join = function(promises){ var p = new Promise(); var results = []; if (!promises || !promises.length) { p.done(results); return p; } var numdone = 0; var total = promises.length; function notifier(i) { return function() { numdone += 1; results[i] = Array.prototype.slice.call(arguments); if (numdone === total) { p.done(results); } }; } for (var i = 0; i < total; i++) { promises[i].then(notifier(i)); } return p; }; Promise.chain = function(funcs, args) { var p = new Promise(); if (!funcs || !funcs.length) { p.done.apply(p, args); } else { funcs[0].apply(null, args).then(function(){ funcs.splice(0, 1); Promise.chain(funcs, arguments).then(function(){ p.done.apply(p, arguments); }); }); } return p; }; })();
相關文章
- [翻譯] 使用JavaScript實現自己的PromisesJavaScriptPromise
- nodejs實現jwtNodeJSJWT
- 手動實現一個滿足promises-aplus-tests的PromisePromise
- nodejs實現restful APINodeJSRESTAPI
- 一步一步實現一個符合Promises/A+規範的PromisePromise
- nodejs學習之使用nodejs實現rm/cp/mv命令NodeJS
- 【譯】JavaScript中的PromisesJavaScriptPromise
- NodeJS實現websocket代理機制NodeJSWeb
- NodeJs 實戰——原生 NodeJS 輕仿 Express 框架從需求到實現(二)NodeJSExpress框架
- # NodeJs 實戰——原生 NodeJS 輕仿 Express 框架從需求到實現(一)NodeJSExpress框架
- nodejs + koa2 實現爬蟲NodeJS爬蟲
- NodeJS實現簡易區塊鏈NodeJS區塊鏈
- NodeJS 說說“重寫” 自定義stream 的實現NodeJS
- NodeJs中資料庫的使用NodeJS資料庫
- Promises A+規範原文解讀 + es6實現(附詳細註釋)Promise
- NodeJS Https HSM雙向認證實現NodeJSHTTP
- 前端技術探秘-Nodejs的CommonJS規範實現原理前端NodeJS
- NodeJS中的LRU快取(CLOCK-2-hand)實現NodeJS快取
- JavaScript Promises, async/awaitJavaScriptPromiseAI
- 使用 nodejs 中的 http 模組實現幾個超實用的工具NodeJSHTTP
- NodeJs服務註冊與服務發現實現NodeJS
- Holer實現外網訪問內網NodeJS內網NodeJS
- nodejs實現一個word文件解析器NodeJS
- 【譯】 Promises/A+ 規範Promise
- NodeJS 基於redis的分散式鎖的實現(Redlock演算法)NodeJSRedis分散式演算法
- NodeJS 伺服器實現資源防盜鏈NodeJS伺服器
- 從零實現Vue的元件庫(十六)- Dropdown 實現Vue元件
- 從零實現Vue的元件庫(九)- InputNumber 實現Vue元件
- 從零實現Vue的元件庫(二)- Slider 實現Vue元件IDE
- 從零實現Vue的元件庫(一)- Toast 實現Vue元件AST
- 從零實現Vue的元件庫(十二)- Table 實現Vue元件
- 從零實現Vue的元件庫(十四)- RadioGroup 實現Vue元件
- 從零實現Vue的元件庫(十三)- Pagination 實現Vue元件
- 從零實現Vue的元件庫(十)- Select 實現Vue元件
- 從零實現Vue的元件庫(八)- Input 實現Vue元件
- 從零實現Vue的元件庫(五)- Breadcrumb 實現Vue元件
- nodejs實現靜態伺服器與react前端搭配NodeJS伺服器React前端
- nodeJS 爬蟲,通過Puppeteer實現滾動載入NodeJS爬蟲
- nodejs之資料庫連線NodeJS資料庫