Promise가 무엇인지, 어떤 문제를 해결하는지에 대해서는 노드의 콜백 비동기 코딩 방식을 경험해 보시고 http://wiki.commonjs.org/wiki/Promises/A를 참조하세요. 어떻게 정의되어 있으므로 여기서는 자세히 설명하지 않겠습니다.
여기서 q.js를 사용하여 노드 API의 약속을 구현하는 방법을 살펴보겠습니다.
1. 모든 것은 설치부터 시작됩니다
npm 설치 q
2. 표준 노드 스타일 API의 Promise 방식
1. Q.nfcall을 사용하세요
Q.fcall과 관련하여 Q.nfcall은 node의 Q.fcall입니다.
var FS = require('fs'),
Q = 요구('q'),
색상 = require('색상'),
파일 = 'example.txt';
var fsReadFile = Q.nfcall(FS.readFile,파일,인코딩);
fsReadFile.then(함수(결과){
console.log((“nfcall에서 호출” 파일).red);
console.log(result.green);
},함수(오류){
console.log(“nfcall에서 호출”.red);
console.log(error.toString().red);
}
);
2. Q.denodeify를 사용하세요
var fsReadFile_denodeify = Q.denodeify(FS.readFile);
fsReadFile_denodeify(파일,인코딩).then(함수(결과){
console.log("invoke in denodeify".red);
console.log(결과.녹색)
},함수(오류){
console.log("invoke in denodeify".red);
console.log(error.toString().red);
}
);
3. Q.deferd를 사용하세요
var fsReadFile_deferd = 함수(파일,인코딩){
var deferred = Q.defer();
FS.readFile(파일,인코딩,함수(오류,결과){
If(오류){
deferred.reject(error.toString().red);
}
deferred.resolve(결과);
});
deferred.promise 반환;
};
fsReadFile_deferd(파일).then(함수(결과){
console.log("invoke in defer".red);
console.log(result.toString().green);
},함수(오류){
console.log("invoke in defer".red);
console.log(error.toString().red);
}
);
4. makeNodeResolver()를 사용하세요
var fsReadFile_makeNodeResolver = 함수(파일,인코딩){
var deferred = Q.defer();
FS.readFile(file,encoding,deferred.makeNodeResolver());
deferred.promise 반환;
};
fsReadFile_makeNodeResolver(파일,인코딩).then(함수(결과){
console.log("makeNodeResolver에서 호출".red);
console.log(result.green);
},함수(오류){
console.log(error.toString().red);
});