๐ promise ํจํด
- new ์ฐ์ฐ์๋ก ํธ์ถํด์ ์ฌ์ฉํ๋ค.
- promise ํจํด์ ์ธ์๋ก ๋์ด๊ฐ๋ ์ฝ๋ฐฑํจ์๋ ๋ฐ๋ก ํธ์ถํ์ง ์์๋ ๋ฐ๋ก ์คํ๋๋ค.
- ํ๋ผ๋ฏธํฐ๋ resolve, reject ์ด๋ ๊ฒ ์ฌ์ฉํ๋ค
- ์ฑ๊ณต์ ๊ฒฐ๊ณผ๋ resolve ๋ฅผ ํตํด then ์ด ์คํ๋๋ฉฐ, ์คํจ์ ๊ฒฐ๊ณผ๋ reject๋ฅผ ํตํด catch ๊ฐ ์คํ๋๋ค.
- catch๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ์ค๋ฅ๊ฐ ์๊ธด๋ค. catch ๋ฅผ ์ด์ฉํด ์๋ฌ๋ฅผ ์ปจํธ๋กค ํ๋ค.
- .finally๋ ์ฑ๊ณต ์คํจ ์ฌ๋ถ์ ์๊ด ์์ด ํญ์ ์คํ๋๋ค.
์์)
new Promise(function (resolve, reject) {
setTimeout(function () {
let name = "์์คํ๋ ์";
console.log(name);
resolve(name);
}, 500);
})
.then(function (preName) {
return new Promise(function (resolve, reject) {
setTimeout(function () {
let name = preName + ", ์๋ฉ๋ฆฌ์นด๋
ธ";
console.log(name);
resolve(name);
}, 500);
});
})
.then(function (preName) {
return new Promise(function (resolve, reject) {
setTimeout(function () {
let name = preName + ", ์นดํ๋ชจ์นด";
console.log(name);
resolve(name);
}, 500);
});
});
์์ ์ฝ๋๋ฅผ ๋ฆฌํํ ๋ง ํ๋ค๋ฉด ์ด๋ ๊ฒ ๋๋ค.
let addCoffee = function (name) {
//preName์ ์ฒซ๋ฒ์งธ ํ๋ก๋ฏธ์ค ํจํด์์ ๋ฐํ๋ ๊ฐ์ด ์๋์ผ๋ก ๋ค์ด์ด.
return function (preName) {
return new Promise(function (resolve, reject) {
setTimeout(function () {
let newName = preName ? preName + ", " + name : name;
console.log(newName);
resolve(newName);
}, 500);
});
};
};
addCoffee("์์คํ๋ ์")()
.then(addCoffee("๋
น์ฐจ๋ผ๋ผ"))
.then(addCoffee("๋ผ์ํผ์ง์ค"));
์ฝ๋๋ฅผ ์ฒ์ฒํ ์ดํด๋ณด๋ฉด ์ดํด๋ ๊ฐ์ง๋ง, ์ง์ ๋ฆฌํํ ๋ง์ ๊ตฌํํ๋ ค๋ฉด ๋ ๋ง์ด ๋ณด๊ณ ์ณ๋ด์ผ๊ฒ ๋ค.
๐ reject๊ฐ ๋์ catch๊ตฌ๋ฌธ์ด ์คํ๋๋ ๊ฒ์ ๋ํ ์์๋ ์๋ ๋งํฌ๋ฅผ ์ดํด๋ณด๋ฉด ์๋ค.
https://gabojok.tistory.com/142
๐ generator ํจํด
- iterator ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
- ํจ์์ * ์ ๋ถ์ฌ์ ์ด์ฉํ๋ค.
- ๋๊ธฐ ์ฝ๋์ฒ๋ผ ์ฝ์ ์ ์๋๋ก ํจ. (๋น๋๊ธฐ ์ฝ๋ ์์ฒด์ ๊ฐ๋ ์ฑ ๋ฌธ์ )
- generator ๋ ํจ์์ ์ฝ๋๋ธ๋ก ์คํ์ ์ผ์ ์ค์ง ํ ์ดํ , ํ์ํ ๋์ ๋ค์ ์์ํ ์ ์๋ค.
- (es5 ๊น์ง๋ ํจ์๊ฐ ์คํ๋๋ฉด ์๋ฃ๋ ๋ ๊น์ง ๊ณ์ ์คํ)
- yield ๊ฐ ์คํ๋๋ฉด ๐ ์ ์ด๊ถ ์๋ณด ๋๋ฉฐ, ํจ์๊ฐ ๋ฉ์ถ๊ณ ํจ์ ํธ์ถ์ ์๊ฒ ์ ์ด๊ถ์ ์๋ณดํ๋ค.
- .next()๋ฅผ ํธ์ถํด์ผ ๋ค์ ๋ฉ์ท๋ ํจ์๊ฐ ์คํ๋๋ค.
- ์ฝ๋๊ฐ ๊ธธ์ด์ง๋ค. (yield ์ ๋ง๋ ์ ์ง ํ ๋ค์, ๋ค์ ์คํํ๋ ค๋ฉด then ์ ํตํด ์คํ๋ ๊ฒฐ๊ณผ๋ฌผ์ ๋ฐ์์์ .next() ํธ์ถํด์ผ ํ๋ค. )
์์)
let adCoffee = function (prevName, name) {
setTimeout(function () {
coffeeMaker.next(prevName ? prevName + ", " + name : name);
}, 500);
};
let coffeeGenerator = function* () {
let espresso = yield adCoffee("", "์์คํ๋ ์");
console.log(espresso);
let americano = yield adCoffee(espresso, "์๋ฉ๋ฆฌ์นด๋
ธ");
console.log(americano);
let mocha = yield adCoffee(americano, "์นดํ๋ชจ์นด");
console.log(mocha);
let latte = yield adCoffee(mocha, "์นดํ๋ผ๋ผ");
console.log(latte);
};
let coffeeMaker = coffeeGenerator();
coffeeMaker.next();
//์ฝ์์ฐฝ
์์คํ๋ ์
์์คํ๋ ์, ์๋ฉ๋ฆฌ์นด๋
ธ
์์คํ๋ ์, ์๋ฉ๋ฆฌ์นด๋
ธ, ์นดํ๋ชจ์นด
์์คํ๋ ์, ์๋ฉ๋ฆฌ์นด๋
ธ, ์นดํ๋ชจ์นด, ์นดํ๋ผ๋ผ
์์)
var x = 1;
// ์ ๋ค๋ ์ดํฐ ํจ์๋ฅผ ์์ฑํ๊ธฐ ์ํด function ํค์๋์ * ์ ๋ถ์
๋๋ค.
function* foo() {
x++;
yield;
console.log("x : ", x);
}
function bar() {
x++;
}
// ์ ๋ค๋ ์ดํฐ ํจ์๋ฅผ ํธ์ถํ๋ฉฐ, ์ ๋ค๋ ์ดํฐ ๊ฐ์ฒด๊ฐ ๋ฐํ๋ฉ๋๋ค. ์ ๋ค๋ ์ดํฐ ๊ฐ์ฒด๋ ์ดํฐ๋ฌ๋ธ์ด๋ฉด์, ๋์์ ์ดํฐ๋ ์ดํฐ์
๋๋ค.
// ๋ฐํ๋ 'generator' ๊ฐ์ฒด๋ next() ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
var generator = foo();
// foo()๋ ์ฌ๊ธฐ์ ์์๋ฉ๋๋ค.
generator.next();
console.log(x); // 2
bar();
console.log(x); // 3
generator.next(); // x : 3
๐ async / await ํจํด
- promise ์, generator๋ฅผ ํฉ์น ์ !
- ์ธ์ ๋ promise ๊ฐ์ฒด๋ฅผ ๋ฐํ. __ promise ํจํด ๋ง๋ค์ง ์๊ณ ๋ promise ํจํด์ ์ฌ์ฉ ํ ์ ์๋ค.
- promise ํจํด๊ณผ๋ ๋ฌ๋ฆฌ ํจ์ ์คํํด์ผ ์๋
- await๊ฐ ๊ฑธ๋ ค์๋ ์ฝ๋๊ฐ ํด๊ฒฐ๋ ๋ ๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค.
- await๋ฅผ ํตํด promise๊ฐ ์ํ๋ ๊ฒฐ๊ณผ ๊ฐ์ ์ ๋ฌ๋ฐ๋๋ค.
- try { ์คํํ ๊ตฌ๋ฌธ }, catch( err ){ ์๋ฌ ์ฒ๋ฆฌ }
์์)
let adadCoffee = function (name) {
return new Promise(function (resolve, reject) {
setTimeout(function () {
resolve(name);
}, 500);
});
};
let coffeeMaker1 = async function () {
let coffeeList = "";
let _adadCoffe = async function (name) {
coffeeList += (coffeeList ? ", " : "") + (await adadCoffee(name));
};
await _adadCoffe("์์คํ๋ ์");
console.log(coffeeList);
await _adadCoffe("์ค๋ ์ง์ฃผ์ค");
console.log(coffeeList);
await _adadCoffe("์ฌ๊ณผ์ฃผ์ค");
console.log(coffeeList);
};
coffeeMaker1();
์์)
async function main() {
try {
const response = await ajaxRequest('์๋ชป๋ URL');
render(response.data);
} catch (error) {
console.error(error) // ์๋ฌ ๋ฐ์
}
}
์ฐธ๊ณ ํ ๋ธ๋ก๊ทธ
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
23/10/18 TIL __ ํ๋ก๊ทธ๋๋จธ์ค lv1. ์ถ์ต์ ์ (1) | 2023.10.18 |
---|---|
23/10/17 TIL __ ๋งํฌ๋ ๋ฆฌ์คํธ (0) | 2023.10.17 |
23/10/15 TIL __ .call() / .apply() / .bind() (1) | 2023.10.15 |
23/10/14 TIL __ this ์ ๋ฐ์ธ๋ฉ (0) | 2023.10.14 |
23/10/13 TIL _ ๋จ์ถ์์ฑ๋ช (property shorthand) (2) | 2023.10.13 |