>웹 프론트엔드 >JS 튜토리얼 >nodejs_node.js에서 Javascript Promise 메커니즘의 간단한 구현 예

nodejs_node.js에서 Javascript Promise 메커니즘의 간단한 구현 예

WBOY
WBOY원래의
2016-05-16 16:28:441573검색

Promise/deferred는 비동기 호출 코딩을 처리하기 위한 좋은 사양입니다. 다음은 nodejs 코드를 클래스로 사용하여 promise/A 사양의 간단한 구현을 구현합니다.

코드 복사 코드는 다음과 같습니다.

/**
 * JetBrains WebStorm으로 제작되었습니다.
 * 사용자: xuwenmin
 * 일시 : 14-4-1
 * 시간: 上午9:54
 * 이 템플릿을 변경하려면 파일 | 설정 | 파일 템플릿.
 */

var EventEmitter = require('events').EventEmitter;
var http = require('http');
var util = require('util');
//Promise 객체 정의
var 약속 = 함수(){
// 상속된 이벤트 클래스 구현
EventEmitter.call(this);
}
//이벤트 일반 메서드 상속
util.inherits(Promise, EventEmitter);
//then 메소드는 promise/A 사양의 메소드입니다
Promise.prototype.then = 함수(successHandler, errorHandler, ProgressHandler){
If (성공 핸들러 유형 == '함수'){
This.once('성공', SuccessHandler);
}
If (errorHandler 유형 === '함수'){
This.once('error', errorHandler);
}
If (progressHandler 유형 === '함수'){
This.on('process', ProgressHandler);
}
이것을 돌려주세요;
}

//지연 객체 정의
//상태와 약속 객체를 포함합니다
var 지연 = 함수(){
This.state = '미완료';
This.promise = new Promise();
}
Deferred.prototype.resolve = 함수(obj){
This.state = '완료';
This.promise.emit('success', obj);
}
Deferred.prototype.reject = 함수(err){
This.state = '실패';
This.promise.emit('error', err);
}
Deferred.prototype.progress = 함수(데이터){
This.promise.emit('process', data);
}

//http 요청을 사용하여 위에 정의된 promise/deferred를 적용합니다

var 클라이언트 = 함수(){
var 옵션 = {
호스트 이름:'www.baidu.com',
포트:80,
        경로:'/',
메소드: 'get'
};
var deferred = new Deferred();
var req = http.request(옵션, 함수(res){
          res.setEncoding('utf-8');
      var 데이터 = '';
          res.on('데이터', 함수(청크){
              데이터 = 청크;
               deferred.progress(청크);
        });
          res.on('end', function(){
              deferred.resolve(data);
        });
});
req.on('error', function(err){
         deferred.reject(err);
})
req.end();
deferred.promise 반환;
}
클라이언트().then(함수(데이터){
console.log('요청 완료', data);
}, 함수(err){
Console.log('액세스 오류', err);
}, 함수(청크){
console.log('읽기', 덩어리);
});

코드는 promise.js로 저장되며, 명령줄에서 실행할 수 있습니다. node promise.js를 직접 입력하면 실행 효과를 확인할 수 있습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.