node promise实现原理

256 阅读1分钟

promise的用法

//定义promise, then函数的作用就是保存三个函数
const util = require('util');
const EventEmitter = require('events');
let Promise = function () {
	EventEmitter.call(this);
}
util.inherits(Promise, EventEmitter)
Promise.prototype.then = function (fulfilldHandler, errorHandler, progressHandler) {
	this.once('success', fulfilldHandler);
	this.once('error', errorHandler);
	this.on('progress', progressHandler)
	return this;
}
//
let Deferred = function () {
	this.status = '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('progress', obj)
}

let promisify = function (res) {
	let deferred = new Deferred();
	let result = '';
	res.on('data', function (chunk) {
		result += chunk;
		deferred.progress(chunk);
	});
	res.on('end', function () {
		deferred.resolve(result);
	});
	res.on('error', function (err) {
		deferred.reject(err);
	});
	return deferred.promise;
}