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

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

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

promise/deferred 是一個(gè)很好的處理異步調(diào)用編碼的規(guī)范,下面以nodejs代碼為類,來實(shí)現(xiàn)一個(gè)promise/A 規(guī)范的簡(jiǎn)單實(shí)現(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對(duì)象
var Promise = function(){
    // 實(shí)現(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;
}

// 定義延遲對(duì)象
// 包含一個(gè)狀態(tài)和一個(gè)promise對(duì)象
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);
}

// 利用一個(gè)http請(qǐng)求來運(yùn)用上面定義的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('請(qǐng)求完成', data);
}, function(err){
    console.log('訪問錯(cuò)誤', err);
}, function(chunk){
    console.log('正在讀取', chunk);
});

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

相關(guān)文章

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

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

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

    node.js + socket.io 實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)隨機(jī)匹配聊天

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

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

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

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

    Node.js我們用到非常的多了,如果我們開發(fā)不當(dāng)可能因錯(cuò)誤導(dǎo)致進(jìn)程阻塞問題,對(duì)于進(jìn)程阻塞問題一直是個(gè)頭痛的事情,今天我們一起來看一篇關(guān)于Node.js防止錯(cuò)誤導(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ù)自動(dòng)化、以及豐富的前端框架和庫(kù)等等,本文給大家介紹了如何預(yù)防NodeJS命令注入,文中有詳細(xì)的代碼講解,需要的朋友可以參考下
    2023-12-12
  • 詳解nodeJS中讀寫文件方法的區(qū)別

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

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

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

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

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

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

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

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

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

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

最新評(píng)論