Promise 객체는 비동기 프로그래밍을 위해 CommonJS 작업 그룹에서 제공하는 통합 인터페이스입니다. 이는 ECMAScript6에서 제공되는 Promise에 대한 기본 지원입니다. Promise를 사용하면 콜백 함수 중첩을 피할 수 있습니다. 또한 이 사양을 통해 비동기 작업을 더 쉽게 제어할 수 있습니다. Reject, Resolve, Then, catch 등의 메서드를 제공합니다.
PROMISE 사용
Promise는 ES6 이후의 기본 객체입니다. 직접 사용하려면 Promise 객체를 인스턴스화하기만 하면 됩니다.
약속 인스턴스화:
var promise = new Promise(function (resolve, reject) { console.log('begin do something'); if (Math.random() * 10.0 > 5) { console.log(" run success"); resolve(); } else { console.log(" run failed"); reject(); } });
여기에는 콜백 메서드 함수(resolve,reject)가 정의되어 있습니다. 성공하면 resolve가 호출됩니다.
Promise.prototype.then은 Promise가 실행된 후의 콜백입니다. then 메서드를 사용하여 각각 해결 및 거부 콜백을 지정할 수 있습니다.
promise.then(function () { console.log(' resolve from promise'); }, function () { console.log(' reject from promise'); });
실행 결과 1:
begin do something run success resolve from promise
실행 결과 2:
begin do something run failed reject from promise
네트워크 요청에 PROMISE 사용
getRequest = function (url) { var promise = new Promise(function (resolve, reject) { var request = require('request'); request(url, function (error, respones, body) { if (error) { reject(error); return; } if (respones.statusCode == 200) { resolve(body) } else { reject(respones.status); } }); }); return promise; }; getRequest("https://github.com/").then(function (result) { console.log(result); }, function (error) { console.error('error', error); });
Promise를 사용하여 네트워크 요청을 하고, Promise를 사용하여 검색 시 Ajax 요청을 구현할 수도 있습니다.
코드 주소: https://github.com/jjz/node