๐Ÿ“œJS

[Javascript] Promise ์ดํ•ดํ•˜๊ธฐ

harry.93 2021. 10. 6. 12:13
๋ฐ˜์‘ํ˜•

 

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
});

 

728x90
๋ฐ˜์‘ํ˜•