欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

復(fù)制代碼 代碼如下:

/**
 * 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,即可看到運行效果。

相關(guān)文章

  • Node.js實現(xiàn)壓縮與解壓數(shù)據(jù)

    Node.js實現(xiàn)壓縮與解壓數(shù)據(jù)

    這篇文章介紹了Node.js實現(xiàn)壓縮與解壓數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • node.js + socket.io 實現(xiàn)點對點隨機(jī)匹配聊天

    node.js + socket.io 實現(xiàn)點對點隨機(jī)匹配聊天

    這篇文章主要介紹了node.js + socket.io 實現(xiàn)點對點隨機(jī)匹配聊天,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Express中使用Swagger的實現(xiàn)示例

    Express中使用Swagger的實現(xiàn)示例

    swagger-express是一個規(guī)范和完整的框架實現(xiàn),本文主要介紹了Express中使用Swagger的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • 防止Node.js中錯誤導(dǎo)致進(jìn)程阻塞的辦法

    防止Node.js中錯誤導(dǎo)致進(jìn)程阻塞的辦法

    Node.js我們用到非常的多了,如果我們開發(fā)不當(dāng)可能因錯誤導(dǎo)致進(jìn)程阻塞問題,對于進(jìn)程阻塞問題一直是個頭痛的事情,今天我們一起來看一篇關(guān)于Node.js防止錯誤導(dǎo)致的進(jìn)程阻塞示例,下面一起來看看。
    2016-08-08
  • 預(yù)防NodeJS命令注入的方法詳解

    預(yù)防NodeJS命令注入的方法詳解

    Node.js和npm為前端生態(tài)中提供了統(tǒng)一的開發(fā)語言、強(qiáng)大的包管理和模塊生態(tài)系統(tǒng)、靈活的構(gòu)建工具和任務(wù)自動化、以及豐富的前端框架和庫等等,本文給大家介紹了如何預(yù)防NodeJS命令注入,文中有詳細(xì)的代碼講解,需要的朋友可以參考下
    2023-12-12
  • 詳解nodeJS中讀寫文件方法的區(qū)別

    詳解nodeJS中讀寫文件方法的區(qū)別

    本篇文章主要介紹了詳解nodeJS中讀寫文件方法的區(qū)別,nodejs的fs模塊針對讀操作為我們提供了readFile,read, createReadStream三個方法,有興趣的可以了解一下。
    2017-03-03
  • 微信小程序在線客服自動回復(fù)功能(基于node)

    微信小程序在線客服自動回復(fù)功能(基于node)

    這篇文章主要介紹了微信小程序在線客服自動回復(fù)功能(基于node),由于小程序嵌套webview時需要校驗域名,因此跳轉(zhuǎn)到第三方應(yīng)用市場和Appstroe無法實現(xiàn)導(dǎo)流。那怎么辦呢,需要的朋友可以參考下
    2019-07-07
  • Node.js實現(xiàn)批量下載圖片簡單操作示例

    Node.js實現(xiàn)批量下載圖片簡單操作示例

    這篇文章主要介紹了Node.js實現(xiàn)批量下載圖片簡單操作,結(jié)合實例形式分析了node.js批量下載圖片的具體步驟與相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2020-01-01
  • 詳解Node.js中exports和module.exports的區(qū)別

    詳解Node.js中exports和module.exports的區(qū)別

    這篇文章主要介紹了詳解Node.js中exports和module.exports的區(qū)別,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • Node.js 中使用 async 函數(shù)的方法

    Node.js 中使用 async 函數(shù)的方法

    async是一個流程控制工具包,提供了直接而強(qiáng)大的異步功能?;贘avascript為Node.js設(shè)計,同時也可以直接在瀏覽器中使用。
    2017-11-11

最新評論