[Javascript] Promise ์ดํดํ๊ธฐ
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Promise
Promise - JavaScript | MDN
Promise ๊ฐ์ฒด๋ ๋น๋๊ธฐ ์์ ์ด ๋ง์ดํ ๋ฏธ๋์ ์๋ฃ ๋๋ ์คํจ์ ๊ทธ ๊ฒฐ๊ณผ ๊ฐ์ ๋ํ๋ ๋๋ค.
developer.mozilla.org
1. ๋ชฉ์
- ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ๋ณด์ฌ์ฃผ๊ฑฐ๋ ํ ๋, ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ ์ํ ๋ฉ์๋
2. ๋ด์ฉ
- ๊ธฐ๋ณธ๊ตฌ์กฐ
test : function () {
return new Promise( function(resolve, reject) {
$.get('request_url', function(data) {
resolve(data);// ๋ฆฌํด๋ฐ์ ๋ฐ์ดํฐ๋ฅผ resolve์ ํจ๊ป ํธ์ถ.
});
});
}
test().then( function(data) {
console.log(data); // then ์ผ๋ก ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์
});
์์ ๊ฐ์ ๊ธฐ๋ณธ ํํ๋ฅผ ๊ฐ์ง๋ฉฐ, resolve๋ฅผ ํตํด then ์ผ๋ก ์ด์ด์ง๋ ์ดํ ์์ ์ ์คํํ๋ค.
3. promise ์ ์ํ
1. Pending(๋๊ธฐ) : ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ก์ง์ด ์์ง ์๋ฃ๋์ง ์์ ์ํ
new Promise();
- ํจ์ ์ ์ธ ์, ์ํ.
2. Fulfilled(์ดํ) : ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋์ด ํ๋ก๋ฏธ์ค๊ฐ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐํํด์ค ์ํ
return new Promise(function(resolve,reject){
resolve();
});
- resolve ๋ฅผ ํธ์ถํ ์ํ.
3. Rejected(์คํจ) : ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์คํจํ๊ฑฐ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ํ
test: function () {
return new Promise( function ( resolve, reject ) {
reject(new Error("error!"));
});
}
test().then().catch(function(err) {
console.log(err); // error!
});
์๋ฒ ์์ฒญ ์คํจ ์, ์๋ฌ๋ฐ์์ reject ๋ฅผ ํธ์ถํ์ฌ catch ๋ก ๋ฐ์ ํํํ๋ค.
4. ์ถ๊ฐ ๋ด์ฉ
- then ์ผ๋ก ๊ณ์ ์ด์ด์ ์ฒ๋ฆฌ๋ฅผ ์งํํ ์ ์๋ค.
test : function () {
return new Promise ( function(resolve, reject) {
$.get('request_url', function(response) {
if (response) {
resolve(response);
}
reject(new Error("error!"));
});
});
}
test().then( function ( data ) {
console.log(data); // 1
return data + 1; // 2
}).then ( function ( data ) {
console.log(data); // 2
return data + 1; // 3
});