Promise
JavaScript νΉμ±μ μ±κΈ μ€λ λ νκ²½μμ λλΆλΆμ μμ λ€μ λΉλκΈ°λ‘ μ΄λ£¨μ΄μ§λ€.
νμ§λ§ μ΅κ·Όμ μλ°μ€ν¬λ¦½νΈ κΈ°μ μ λ°μ κ³Ό νλμ μμ μ μ½λ°±μΌλ‘ κ²°κ³Όλ₯Ό λ°μλ€ μμ°¨μ μΌλ‘ μμ μ μννκ³ μ νλ€λ©΄ μλμ κ°μ μ½λ°± μ€μ²© (μ½λ°± μ§μ₯) μ κ²½ννκ² λλ€.
async(1, function () {
async(2, function () {
async(3, function () {
async(4, function () {
async(5, function () {
console.log('μμ
μλ£???!!??!!')
});
});
});
});
});
μ΄λ¬ν μν©μ 극볡νκΈ° μν΄ μ€λμ λΆν° Promies λΌλ ν¨ν΄μ΄ μ μλμ΄ μμΌλ©° λ€μν λΌμ΄λΈλ¬λ¦¬λ₯Ό ν΅ν΄μ μ΄λ₯Ό ꡬννμ¬ μ¬μ©ν΄ μλ€.
Promise
ν¨ν΄μ ES5 νκ²½μμ μΌλΆ λΈλΌμ°μ μμ μ¬μ© κ°λ₯νλ©° ES6 μ μ μ μ€ν©μ ν¬ν¨λμλ€.
λΈλΌμ°μ λ³ μ§μ μ¬λΆ
IE λ μ¬μ© λΆκ°νμ¬ Polyfill μ½λλ₯Ό μ¬μ©νμ¬ κ΅¬νν΄μΌ ν¨
Chrome, FF λ Full Support
μλλ HTML5Rocks μμ 보μ΄κ³ μλ νλ‘λ―Έμ€μ μμ μ΄λ€.
asyncThing1()
.then( () => asyncThing2() )
.then( () => asyncThing3() )
.catch( error => asyncRecovery1() )
then( () => asyncThing4(), () => asyncRecovery2() )
.catch( error => console.log('Don\'t worry about it') )
then( () => console.log('All done') );
Syntax
new Promise(function (resolve, reject) {
/* statement */
});
μ€νμ Promise
ꡬ문μμ μ€νν μ΅λͺ
ν¨μμ λ°νκ°μ 무μλλ€.
- resolve
- μ±κ³΅μ μ λ¬λλ μΈμ (ν¨μ νΉμ λ³μ)
- reject
- μ€ν¨μ μ λ¬λλ μΈμ (ν¨μ νΉμ λ³μ)
μ μΈ
Promise μ κΈ°λ³Έμ μΈ μ μΈμ μλμ κ°λ€.
var _promise = function (param) {
return new Promise(function (resolve, reject) {
window.setTimeout(function () {
if (param) {
resolve('Success');
} else {
reject(Error('Failed'));
}
}, 3000);
});
}
Promise
μ¬μ©μ λ€μ μνμ€μ νλκ° λ κ²μ΄λ€.
- pending
- μμ§
Promise
λ₯Ό μνμ€μΈ μν
- μμ§
- fulfilled
Promise
κ° μ±κ³΅μ μΈ μνμ΄λ€.
- rejected
Promise
κ° μ€ν¨ν μνμ΄λ€.
- settled
Promise
μ±κ³΅μ¬λΆμ μκ΄μμ΄ μλ£λ μνμ΄λ€.
new Promise
λ‘ Promise κ° μμ±λλ μ§νλΆν° resolve
λ reject
κ° νΈμΆλκΈ° μ κΉμ§μ μκ°μ pending μνλΌκ³ λ³Ό μ μλ€.
μ΄ν λΉλκΈ° μμ
μ΄ λ§μΉλ€ κ²°κ³Όλ¬Όμ μ½μλλ‘ μ μ€ μ μλ€λ©΄ 첫λ²μ§Έ νλΌλ©ν°λ‘ μ£Όμ
λλ resolve
ν¨μλ₯Ό νΈμΆνκ³ , μ€ν¨νλ€λ©΄ reject
ν¨μλ₯Ό νΈμΆνλ κ²μ΄ κΈ°λ³Έμ μΈ Promise κ°λ
μ΄λ€.
μ΄λ₯Ό μ€ννλ μ€νλΆλ μλμ κ°λ€.
_promise(true)
.then(function (message) {
console.log(message);
}, function (error) {
console.error(error);
});
μ€νλΆμμλ _promise()
λ₯Ό μ€ννλ©΄ Promise μ μλ‘μ΄ κ°μ²΄κ° λ°νλκ³ μ μμ μΌλ‘ λΉλκΈ° μμ
μ΄ μνλ¬μλ then
μ νΈμΆνλ API κ° μ‘΄μ¬νλ€.
then
μ μ±κ³΅μ 첫λ²μ§Έ νλΌλ©ν°λ₯Ό μννλ©°, μ€ν¨μ λλ²μ§Έ νλΌλ©ν°λ₯Ό μννκ² λλ€.
μμΈμ²λ¦¬
Javascript ν¨μμ 체μ΄λμΌλ‘ μ°κ²°λ ννμμ λΉλκΈ° μμ μ΄ μ€κ°μ μλ¬λ κ²½μ° λ€μκ³Ό κ°μ΄ μ²λ¦¬ κ°λ₯νλ€.
_promise(true)
.then(JSON.parse)
.catch(function () {
alert('Error');
})
.then(function (message) {
console.log(message);
})
λͺ¨λ Promise λ₯Ό μλ£νκ³ μ€ν
var promise1 = new Promise(function (resolve, reject) {
window.setTimeout(function () {
console.log('1st Promise');
resolve('1');
}, Math.random() * 20000 + 1000);
});
var promise2 = new Promise(function (resolve, reject) {
window.setTimeout(function () {
console.log('2nd Promise');
resolve('2');
}, Math.random() * 10000 + 1000);
});
Promise.all([promise1, promise2])
.then(function (values) {
console.log('All Complete');
console.dir(values);
});
async
μ await
ES8 μμ Promise μ¬μ©μ μ½κ² ν΄μ£Όλ async
μ await
μ λμ
νμλ€.
μ΄λ λΉλκΈ° μ½λλ₯Ό λ μ½κ² μμ± κ°λ₯νκ² νλ©° λ§μΉ λκΈ°ν μ½λμ²λΌ μμ±λμ΄ κ°λ μ±μ λμΈλ€.
async
/ await
λ Promise ꡬ문 μ²λΌ non-blocking λ°©μμ΄λ€.
async
λΉλκΈ° ν¨μλ₯Ό μ μνλ©° AsyncFunction
κ°μ²΄λ₯Ό λ°ν ν©λλ€.
AsyncFunction
κ°μ²΄λ ν΄λΉ ν¨μλ΄μ ν¬ν¨λμ΄ μλ μ½λλ₯Ό μννλ λΉλκΈ° ν¨μλ₯Ό λνλ
λλ€.
await
async
ν¨μ λ΄μμλ§ μ¬μ©λ μ μμΌλ©° λκΈ°μ μΌλ‘ Promise λ₯Ό μ²λ¦¬ ν΄μ€λλ€.
async
λ°μμ νλ‘λ―Έμ€λ₯Ό μ¬μ©νλ©΄ then
μ½λ°±μ μ¬μ©ν΄μΌ νλ€.
async function loadData() {
var promise1 = req('/getData_1.json');
var promise2 = req('/getData_2.json');
var response1 = await promise1;
var response2 = await promise2;
return response1 + response2;
}
loadData()
.then(() => {
console.log('Done');
});
μ°Έκ³ μλ£
https://programmingsummaries.tistory.com/325
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Promise
https://joshua1988.github.io/web-development/javascript/promise-for-beginners/
https://medium.com/@constell99/μλ°μ€ν¬λ¦½νΈμ-async-await-κ°-promisesλ₯Ό-μ¬λΌμ§κ²-λ§λ€-μ-μλ-6κ°μ§-μ΄μ -c5fe0add656c