最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

nodejs中簡單實現(xiàn)Javascript Promise機制的實例

 更新時間:2014年12月06日 12:10:18   投稿:junjie  
這篇文章主要介紹了nodejs中簡單實現(xiàn)Javascript Promise機制的實例,本文在nodejs中簡單實現(xiàn)一個promise/A 規(guī)范,需要的朋友可以參考下

promise/deferred 是一個很好的處理異步調用編碼的規(guī)范,下面以nodejs代碼為類,來實現(xiàn)一個promise/A 規(guī)范的簡單實現(xiàn)

復制代碼 代碼如下:

/**
 * Created with JetBrains WebStorm.
 * User: xuwenmin
 * Date: 14-4-1
 * Time: 上午9:54
 * To change this template use File | Settings | File Templates.
 */

var EventEmitter = require('events').EventEmitter;
var http = require('http');
var util = require('util');
// 定義promise對象
var Promise = function(){
    // 實現(xiàn)繼承事件類
    EventEmitter.call(this);
}
// 繼承事件通用方法
util.inherits(Promise, EventEmitter);
// then 方法為promise/A 規(guī)范中的方法
Promise.prototype.then = function(successHandler, errorHandler, progressHandler){
    if (typeof successHandler == 'function'){
        this.once('success', successHandler);
    }
    if (typeof errorHandler === 'function'){
        this.once('error', errorHandler);
    }
    if (typeof progressHandler === 'function'){
        this.on('process', progressHandler);
    }
    return this;
}

// 定義延遲對象
// 包含一個狀態(tài)和一個promise對象
var Deferred = function(){
    this.state = 'unfulfilled';
    this.promise = new Promise();
}
Deferred.prototype.resolve = function(obj){
    this.state = 'fulfilled';
    this.promise.emit('success', obj);
}
Deferred.prototype.reject = function(err){
    this.state = 'failed';
    this.promise.emit('error', err);
}
Deferred.prototype.progress = function(data){
    this.promise.emit('process', data);
}

// 利用一個http請求來運用上面定義的promise/deferred

var client = function(){
    var options = {
        hostname:'www.baidu.com',
        port:80,
        path:'/',
        method: 'get'
    };
    var deferred = new Deferred();
    var req = http.request(options, function(res){
        res.setEncoding('utf-8');
        var data = '';
        res.on('data', function(chunk){
            data += chunk;
            deferred.progress(chunk);
        });
        res.on('end', function(){
            deferred.resolve(data);
        });
    });
    req.on('error', function(err){
        deferred.reject(err);
    })
    req.end();
    return deferred.promise;
}
client().then(function(data){
    console.log('請求完成', data);
}, function(err){
    console.log('訪問錯誤', err);
}, function(chunk){
    console.log('正在讀取', chunk);
});

代碼保存為promise.js,可以在命令行下面運行,直接輸入node promise.js,即可看到運行效果。

相關文章

  • 使用node搭建自動發(fā)圖文微博機器人的方法

    使用node搭建自動發(fā)圖文微博機器人的方法

    這篇文章主要介紹了使用node搭建自動發(fā)圖文微博機器人的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • Node.js編寫CLI的實例詳解

    Node.js編寫CLI的實例詳解

    Node.js的應用場景有前后端分離、海量web頁面渲染服務、命令行工具和桌面端應用等等。本篇文章選取CLI(Command Line Tools)子領域,來談談Node.js編寫CLI的實踐,讓CLI切實解決實際工程問題。
    2017-05-05
  • Node.js文本文件BOM頭的去除方法

    Node.js文本文件BOM頭的去除方法

    這篇文章主要給大家介紹了關于Node.js文本文件BOM頭的去除方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • 使用node.js 獲取客戶端信息代碼分享

    使用node.js 獲取客戶端信息代碼分享

    本文給大家分享一段使用node.js 獲取客戶端信息的代碼,非常的簡潔,推薦給大家。
    2014-11-11
  • Node.JS中快速掃描端口并發(fā)現(xiàn)局域網(wǎng)內的Web服務器地址(80)

    Node.JS中快速掃描端口并發(fā)現(xiàn)局域網(wǎng)內的Web服務器地址(80)

    在 Node.JS 中進行端口掃描還是比較方便的,一般會有廣播和輪詢兩種方式。下文重點給大家介紹node.js 掃描端口并發(fā)現(xiàn)局域網(wǎng)內的web服務器地址的方法,一起看看吧
    2017-09-09
  • 簡單談談node.js 版本控制 nvm和 n

    簡單談談node.js 版本控制 nvm和 n

    大量開發(fā)者的貢獻使Node版本的迭代速度很快,版本很多(橫跨0.6到0.11),所以升級Node版本就成為了一個問題。目前有n和nvm這兩個工具可以對Node進行無痛升級,本文簡單介紹一下二者的使用。
    2015-10-10
  • 詳解Puppeteer 入門教程

    詳解Puppeteer 入門教程

    本篇文章主要介紹了詳解Puppeteer 入門教程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Node.js中參數(shù)傳遞的兩種方式詳解

    Node.js中參數(shù)傳遞的兩種方式詳解

    這篇文章主要為大家介紹了Node.js中參數(shù)傳遞的兩種方式:GET方式和POST方式,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-04-04
  • Node.js dgram模塊實現(xiàn)UDP通信示例代碼

    Node.js dgram模塊實現(xiàn)UDP通信示例代碼

    這篇文章主要介紹了Node.js dgram模塊實現(xiàn)UDP通信示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • NPM全局安裝與本地安裝的區(qū)別詳析

    NPM全局安裝與本地安裝的區(qū)別詳析

    NPM是隨同NodeJS一起安裝的包管理工具,能解決NodeJS代碼部署上的很多問題,下面這篇文章主要給大家介紹了關于NPM全局安裝與本地安裝區(qū)別的相關資料,需要的朋友可以參考下
    2022-10-10

最新評論

盈江县| 井研县| 南雄市| 桐梓县| 青海省| 论坛| 鄂托克旗| 焦作市| 临城县| 广灵县| 怀柔区| 普兰县| 西乌| 布尔津县| 循化| 任丘市| 中宁县| 三江| 共和县| 芒康县| 蒙山县| 芜湖市| 石嘴山市| 临清市| 乌鲁木齐县| 巴彦县| 台中市| 门源| 英山县| 柳林县| 田东县| 大宁县| 米易县| 昌图县| 水富县| 英山县| 鄂尔多斯市| 宝兴县| 瑞金市| 仁布县| 哈尔滨市|