菜单

js_脚本之家

2020年2月26日 - www.2138.com

promise/deferred
是一个很好的处理异步调用编码的规范,下面以nodejs代码为类,来实现一个promise/A
规范的简单实现

复制代码 代码如下:/*** 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.EventEmitter;var http = require;var util =
require;// 定义promise对象var Promise = function(){ // 实现继承事件类
EventEmitter.call;}// 继承事件通用方法util.inherits(Promise,
EventEmitter);// then 方法为promise/A 规范中的方法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;}

// 定义延迟对象// 包含一个状态和一个promise对象var Deferred =
function(){ this.state = ‘unfulfilled’; this.promise = new
Promise();}Deferred.prototype.resolve = function{ this.state =
‘fulfilled’; this.promise.emit;}Deferred.prototype.reject = function{
this.state = ‘failed’; this.promise.emit;}Deferred.prototype.progress =
function{ this.promise.emit;}

// 利用一个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.setEncoding; var data = ”;
res.on(‘data’, function{ data += chunk; deferred.progress; res.on{
deferred.resolve; req.on(‘error’, function{ deferred.reject; return
deferred.promise;}client{ console.log;}, function{ console.log;},
function{ console.log;

代码保存为promise.js,可以在命令行下面运行,直接输入node
promise.js,即可看到运行效果。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图