最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

nodejs中简单实现JavascriptPromise机制的实例_node.js

来源:动视网 责编:小采 时间:2020-11-27 21:29:43
文档

nodejs中简单实现JavascriptPromise机制的实例_node.js

nodejs中简单实现JavascriptPromise机制的实例_node.js:promise/deferred 是一个很好的处理异步调用编码的规范,下面以nodejs代码为类,来实现一个promise/A 规范的简单实现 代码如下: /** * Created with JetBrains WebStorm. * User: xuwenmin * Date: 14-4-1 * Time:
推荐度:
导读nodejs中简单实现JavascriptPromise机制的实例_node.js:promise/deferred 是一个很好的处理异步调用编码的规范,下面以nodejs代码为类,来实现一个promise/A 规范的简单实现 代码如下: /** * Created with JetBrains WebStorm. * User: xuwenmin * Date: 14-4-1 * Time:


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('events').EventEmitter;
var http = require('http');
var util = require('util');
// 定义promise对象
var Promise = function(){
// 实现继承事件类
EventEmitter.call(this);
}
// 继承事件通用方法
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(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,即可看到运行效果。

文档

nodejs中简单实现JavascriptPromise机制的实例_node.js

nodejs中简单实现JavascriptPromise机制的实例_node.js:promise/deferred 是一个很好的处理异步调用编码的规范,下面以nodejs代码为类,来实现一个promise/A 规范的简单实现 代码如下: /** * Created with JetBrains WebStorm. * User: xuwenmin * Date: 14-4-1 * Time:
推荐度:
标签: Nodejs node nodejs中
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top