promise 의 실현 원리
// node EventEmitter promise
var Promise = function(){
EventEmitter.call(this);//
}
util.inherits(Promise,EventEmitter);// node util inherits
Promise.prototype.then = function(fulfilledHandler, errorHandler, progressHandler){
if(typeof fulfilledHandler === 'function'){
this.once('success', fulfilledHandler);// once
}
if(typeof errorHandler === 'function'){
this.once('error', errorHandler);
}
if(typeof progressHandler === 'function'){
this.on('progress',progressHandler);
}
return this;
}
var Deffered = function(){
this.state = 'unfulfilled';
this.promise = new Promise();
}
Deffered.prototype.resolve = function(obj){
this.state = 'fulfilled';
this.promise.emit('success',obj);
}
Deffered.prototype.reject = function(obj){
this.state = 'failed';
this.promise.emit('error',obj);
}
Deffered.prototype.progress = function(obj){
this.promise.emit('progress',obj);
}
//
var promisify = function(res){
var deffered = new Deffered();
var result = '';
res.on('data', function(chunk){
result += chunk;
deffered.progress(chunk);
});
res.on('end', function(){
deffered.resolve(result);
});
res.on('error', function(err){
deffered.reject(err);
});
return deffered.promise;
}
//
promisifi(res).then(function(){},function(){},function(){});
이 deffered 는 주로 비동기 모델 의 상 태 를 유지 하 는 데 사 용 됩 니 다. promise 는 외부 에 작용 하고 then () 을 통 해 사용자 정의 논 리 를 추가 합 니 다.
다 중 비동기 협력 은 어떻게 실현 해 야 합 니까? /다 중 비동기 협력 문 제 를 해결 하 다.
Deffered.prototype.all = function(promises){
var count = promises.length;
var that = this;
var results = [];
promises.forEach(function(promise,i){
promise.then(function(data){
count--;
results[i] = data;
if(count === 0){
that.resolve(results);
}
},function(err){
that.reject(err);
});
});
return this.promise;
}
//
var deffered = new Deffered();
deffered.all([promise1,promise2]).then(function(results){},function(err){})
후속 사고: 시퀀스 지원, 즉 체인 호출 을 지원 하려 면 주로 두 가지 절차 가 필요 합 니 다. 1. 모든 리 셋 을 대기 열 에 존재 합 니 다.2. promise 가 완 료 될 때 각각 리 셋 을 실행 합 니 다. 새로운 promise 대상 으로 돌아 가 는 것 이 감지 되면 실행 을 중단 한 다음 현재 deffered 대상 의 promise 인용 을 새로운 promise 대상 으로 개편 하고 대기 열 에 남 은 리 셋 을 새로운 promise 에 전달 합 니 다.구체 적 인 실현 은 90 페이지 를 참고 할 수 있 습 니 다! ~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Node.js를 AWS서버에서 사용하는 실습간단한 예제와 함께 AWS에서 Node.js를사용하는 법을 배워보도록 하겠다. 해당 github에 있는 레포지토리로 사용을 할 것이다. 3000번 포트로 Listen되는 예제이고 간단히 GET, POST, DELET...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.