๐2์ฅ ํค์๋๐
ES2015
์๋ฐ์คํฌ๋ฆฝํธ์ ํ๋กํ ํ์
๋น๋๊ธฐ
ํ๋ก๋ฏธ์ค, async/await
AJAX
ES2015๋ ES6๋ผ ๋ถ๋ฅด๊ธฐ๋ ํ๋ฉฐ, 2015๋ ์ ์๋ก์ด ๋ฌธ๋ฒ์ ๋์ ํ์ฌ ๊ฐ์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ ๋งํฉ๋๋ค.
์ด๋ฒ ์ฅ์์๋ ES2015 ์ด์์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์์๋๋ฉด ์ข์ ๋ฌธ๋ฒ ๋ช ๊ฐ์ง๋ฅผ ์๊ฐํ๋๋ก ํ๊ฒ ์ต๋๋ค.
if (true) {
var x = 3;
}
console.log(x); // 3
if (true) {
const y = 3;
}
console.log(y); // Uncaught ReferenceError: y is not defined
var | const | let |
ํจ์ ์ค์ฝํ, ๋ธ๋ก ๋ฐ์์ ์ ๊ทผ ๊ฐ๋ฅ | ๋ธ๋ก ์ค์ฝํ, ๋ธ๋ก ๋ฐ์์ ์ ๊ทผ ๋ถ๊ฐ๋ฅ | ๋ธ๋ก ์ค์ฝํ, ๋ธ๋ก ๋ฐ์์ ์ ๊ทผ ๋ถ๊ฐ๋ฅ |
ํ ๋ฒ ๊ฐ์ ํ ๋นํด๋ ๋ณ๊ฒฝ ๊ฐ๋ฅ | ํ ๋ฒ ๊ฐ์ ํ ๋นํ๋ฉด ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ | ํ ๋ฒ ๊ฐ์ ํ ๋นํด๋ ๋ณ๊ฒฝ ๊ฐ๋ฅ |
const num3 = 1;
const num4 = 2;
const result2 = 3;
const string2 = `${num3} ๋ํ๊ธฐ ${num4}๋ '${result2}'`;
console.log(string2); // 1 ๋ํ๊ธฐ 2๋ '3'
var sayNode = function() {
console.log('Node');
};
var es='ES';
var oldObject = {
sayJS: function() { // 1๋ฒ
console.log('JS');
},
sayNode: sayNode, // 2๋ฒ
}
oldObject[es + 6] = 'Fantastic'; // 3๋ฒ
oldObject.sayNode();
oldObject.sayJS();
console.log(oldObject.ES6);
const newObject = {
sayJS(){
console.log('JS');
},
sayNode,
[es+6]:'Fantastic',
};
newObject.sayNode(); // Node
newObject.sayJS(); // JS
console.log(newObject.ES6); // Fantastic
function add1(x, y) {
return x + y;
}
const add2 = (x, y) => {
return x + y;
};
const add3 = (x, y) => x + y;
const add4 = (x, y) => (x + y);
function not1(x) {
return !x;
}
const not2 = x => !x;
// ๊ธฐ์กด function๊ณผ ๋ค๋ฅธ ์ : this ๋ฐ์ธ๋ ๋ฐฉ์
var relationship1 = {
name: 'zero',
friends: ['nero', 'hero', 'xero'],
logFriends: function() { // function ์ ์ธ๋ฌธ ์ฌ์ฉ
var that = this; // relationship1์ ๊ฐ๋ฆฌํค๋ this๋ฅผ that์ ์ ์ฅ
this.friends.forEach(function (friend) {
console.log(that.name, friend);
});
},
};
relationship1.logFriends();
var relationship2 = {
name: 'zero',
friends: ['nero', 'hero', 'xero'],
logFriends() { // :, function ์์
//var that = this; ํ์ ์์.
this.friends.forEach(friend => {
console.log(this.name, friend);
});
},
};
relationship2.logFriends();
relationship1 (๊ธฐ์กด) | relationship2 (ES2015 ์ดํ) |
logFriends() ์์ forEach๋ฌธ์์ function ์ ์ธ๋ฌธ ์ฌ์ฉ | logFriends() ์์ forEach๋ฌธ์์ ํ์ดํ ํจ์ ์ฌ์ฉ |
๊ฐ์ ๋ค๋ฅธ ํจ์ ์ค์ฝํ์ this๋ฅผ ๊ฐ์ง๋ฏ๋ก that์ด๋ผ๋ ๋ณ์๋ฅผ ์ฌ์ฉํด์ relationship1์ ๊ฐ์ ์ ์ผ๋ก ์ ๊ทผ |
๋ฐ๊นฅ ์ค์ฝํ์ธ logFriends()์ this๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉ (์์ ์ค์ฝํ์ this๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉ) |
// ๊ฐ์ฒด์ ์์ฑ์ ๊ฐ์ ์ด๋ฆ์ ๋ณ์์ ๋์
ํ๋ ์ฝ๋
var candyMachine = {
status: {
name: 'node',
count: 5,
},
getCandy: function () {
this.status.count--;
return this.status.count;
},
};
var getCandy = candyMachine.getCandy;
var count = candyMachine.status.count;
// ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝ
const candyMachine = {
status: {
name: 'node',
count: 5,
},
getCandy() { // :, function ์ญ์
this.status.count--;
return this.status.count;
},
};
const { getCandy, status: { count } } = candyMachine;
// ๋ฐฐ์ด์ ๋ํ ๊ตฌ์กฐ ๋ถํด ํ ๋น ๋ฌธ๋ฒ
var array = ['nodjs', {}, 10, true];
var node = array[0];
var obj = array[1];
var bool = array[3];
// ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝ
const array = ['nodejs', {}, 10, true];
const[node, obj, , bool] = array; // 10์ ๋ฌด์
๐ ํ๋กํ ํ์
์ด๋?
https://www.nextree.co.kr/p7323/
// ํ๋กํ ํ์
์์ ์์ ์ฝ๋
var Human = function(type) {
this.type = type || 'human';
};
Human.isHuman = function(human) {
return human instanceof Human;
}
Human.prototype.breathe = function() {
alert('h-a-a-a-m');
};
var Zero = function(type, firstName, lastName) {
Human.apply(this, arguments); // ์์๋ฐ๋ ๋ถ๋ถ
this.firstName = firstName;
this.lastName = lastName;
};
Zero.prototype = Object.create(Human.prototype); // ์์๋ฐ๋ ๋ถ๋ถ
Zero.prototype.constructor = Zero; // ์์ํ๋ ๋ถ๋ถ
Zero.prototype.sayName = function() {
alert(this.firstName + ' ' + this.lastName);
};
var oldZero = new Zero('human', 'Zero', 'Cho');
Human.isHuman(oldZero); // true
// ํด๋์ค ๊ธฐ๋ฐ ์ฝ๋ (๋์์ ํ๋กํ ํ์
๊ธฐ๋ฐ)
class Human {
constructor(type = 'human') {
this.type = type;
}
static isHuman(human) { // staic ํค์๋๋ก ์ ํ
return human instanceof Human;
}
breathe() {
alert('h-a-a-a-m');
}
}
class Zero extends Human {
constructor(type, firstName, lastName) {
super(type);
this.firstName = firstName;
this.lastName = lastName;
}
sayName() {
super.breathe();
alert(`${this.firstName} ${this.lastName}`);
}
}
const newZero = new Zero('human', 'Zero', 'Cho');
Human.isHuman(newZero); // true
์๋ฐ์คํฌ๋ฆฝํธ์ ๋
ธ๋์์๋ ์ฃผ๋ก ๋น๋๊ธฐ๋ฅผ ์ ํ๋ฉฐ, ํนํ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ฌ์ฉํ ๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ์์ฃผ ์ฌ์ฉํ๋ค๋ ํน์ง์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ES2015๋ถํฐ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋
ธ๋์ API๋ค์ด ์ฝ๋ฐฑ ๋์ ํ๋ก๋ฏธ์ค(Promise) ๊ธฐ๋ฐ์ผ๋ก ์ฌ๊ตฌ์ฑ๋ฉ๋๋ค.
๐ ๋น๋๊ธฐ๋?
2022.09.19 - [22-23/22-23 Node.js] - [Node.js] 1์ฅ ๋ ธ๋ ์์ํ๊ธฐ
โ ํ๋ก๋ฏธ์ค๋ฅผ ํ์ฉํ์ฌ ์ ๋ช ๋์ ์ฝ๋ฐฑ ์ง์ฅ์์ ํ์ถํด ๋ด ์๋ค!
const condition = true; // true๋ฉด resolve, false๋ฉด reject
const promise = new Promise((resolve, reject) => { // ํ๋ก๋ฏธ์ค ์์ฑ
if (condition) {
resolve('์ฑ๊ณต');
} else {
reject('์คํจ');
}
});
// ๋ค๋ฅธ ์ฝ๋๊ฐ ๋ค์ด๊ฐ ์ ์์
promise
.then((message) => {
console.log(message); // ์ฑ๊ณต(resolve)ํ ๊ฒฝ์ฐ ์คํ
})
.catch((error) => {
console.error(error); // ์คํจ(reject)ํ ๊ฒฝ์ฐ ์คํ
})
.finally(() => { // ๋๋๊ณ ๋ฌด์กฐ๊ฑด ์คํ
console.log('๋ฌด์กฐ๊ฑด');
});
// ์ฝ๋ฐฑ์ ์ฐ๋ ํจํด
function findAndSaveUser(Users) {
Users.findOne({}, (err, user) => { // ์ฒซ ๋ฒ์งธ ์ฝ๋ฐฑ
if (err) {
return console.error(err);
}
user.name = 'zero';
user.save((err) => { // ๋ ๋ฒ์งธ ์ฝ๋ฐฑ
if (err) {
return console.error(err);
}
Users.findOne({ gender: 'm' }, (err, user) => { // ์ธ ๋ฒ์งธ ์ฝ๋ฐฑ
// ์๋ต
});
});
});
}
// ํ๋ก๋ฏธ์ค๋ก ๋ฐ๊พผ ์ฝ๋
function findAndSaveUser(Users) {
Users.findOne({})
.then((user) => {
user.name = 'zero';
return user.save();
})
.then((user) => {
return Users.findOne({ gender: 'm' });
})
.then((user) => {
// ์๋ต
})
.catch(err => {
console.error(err);
});
}
const promise1 = Promise.resolve('์ฑ๊ณต1');
const promise2 = Promise.resolve('์ฑ๊ณต2');
Promise.all([promise1, promise2])
.then((result) => {
console.log(result); // ['์ฑ๊ณต1', '์ฑ๊ณต2'];
})
.catch((error) => {
console.error(error);
});
์ด๋ค ํ๋ก๋ฏธ์ค์์ reject ๋์๋์ง ์๊ธฐ ์ํด์๋ Promise.allSettled๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
// Promise.allSettled ์ฌ์ฉ
const promise1 = Promise.resolve('์ฑ๊ณต1');
const promise2 = Promise.reject('์คํจ2');
const promise3 = Promise.resolve('์ฑ๊ณต3');
Promise.allSettled([promise1, promise2, promise3])
.then((result) => {
console.log(result);
/* [
* { status: 'fulfilled', value: '์ฑ๊ณต1' },
* { status: 'rejected', reason: '์คํจ2' },
* { status: 'fulfilled', value: '์ฑ๊ณต3' }
* ]
*/
})
.catch((error) => {
console.error(error);
});
try {
Promise.reject('์๋ฌ');
} catch (e) {
console.error(e); // UnhandledPromiseRejection: This error originated either by throwing inside...
}
Promise.reject('์๋ฌ').catch(() => {
// catch ๋ฉ์๋๋ฅผ ๋ถ์ด๋ฉด ์๋ฌ ๋ฐ์ํ์ง ์์
})
// ๊ธฐ์กด์ฝ๋
function findAndSaveUser(Users) {
Users.findOne({})
.then((user) => {
user.name = 'zero';
return user.save();
})
.then((user) => {
return Users.findOne({ gender: 'm' });
})
.then((user) => {
// ์๋ต
})
.catch(err => {
console.error(err);
});
}
// async/await๋ฅผ ์ฌ์ฉํ ์ฝ๋
async function findAndSaveUser(Users) {
try {
let user = await Users.findOne({});
user.name = 'zero';
user = await user.save();
user = await Users.findOne({ gender: 'm' });
// ์๋ต
} catch (error) {
console.error(error);
}
}
โ ํจ์ ์ ์ธ๋ถ๋ฅผ ์ผ๋ฐ ํจ์์์ async function์ผ๋ก ๊ต์ฒดํฉ๋๋ค.
โ ํ๋ก๋ฏธ์ค ์์ await์ ๋ถ์
๋๋ค.
์ด์ ํจ์๋ ํด๋น ํ๋ก๋ฏธ์ค๊ฐ resolve ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ ํ ๋ค์ ๋ก์ง์ผ๋ก ๋์ด๊ฐ๋๋ค.
(await Users.findOne()์ด resolve๋ ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ user ๋ณ์๊ฐ ์ด๊ธฐํ)
// ํ์ดํ ํจ์ + async ํจ๊ป ์ฌ์ฉ
const findAndSaveUser = async (Users) => {
try {
let user = await Users.findOne({});
user.name = 'zero';
user = await user.save();
user = await Users.findOne({ gender: 'm' });
// ์๋ต
} catch (error) {
console.error(error);
}
};
// for๋ฌธ๊ณผ async/await๋ฅผ ํตํ ํ๋ก๋ฏธ์ค ์์ฐจ์ ์คํ
const promise1 = Promise.resolve('์ฑ๊ณต1');
const promise2 = Promise.resolve('์ฑ๊ณต2');
(async () => {
for await (promise of [promise1, promise2]) {
console.log(promise);
}
})();
// ์คํ ํ then์ ๋ถ์ด๊ฑฐ๋ ๋ ๋ค๋ฅธ ํจ์ ์์์ await ๋ถ์ฌ ์ฒ๋ฆฌ
async function findAndSaveUser(Users) {
// ์๋ต
}
findAndSaveUser().then(() => { /* ์๋ต */ });
// ๋๋
async function other() {
const result = await findAndSaveUser();
}
๐ก ์์ผ๋ก ์ค์ฒฉ๋๋ ์ฝ๋ฐฑ ํจ์๊ฐ ์๋ค๋ฉด ํ๋ก๋ฏธ์ค๋ฅผ ๊ฑฐ์ณ async/await ๋ฌธ๋ฒ์ผ๋ก ๋ฐ๊พธ๋ ์ฐ์ต์ ํด๋ด ์๋ค!
const m = new Map();
m.set('a', 'b'); // set(ํค, ๊ฐ)์ผ๋ก Map์ ์์ฑ ์ถ๊ฐ
m.set(3, 'c'); // ๋ฌธ์์ด์ด ์๋ ๊ฐ์ ํค๋ก ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
const d = {};
m.set(d, 'e'); // ๊ฐ์ฒด๋ ๋ฉ๋๋ค.
m.get(d); // get(ํค)๋ก ์์ฑ ๊ฐ ์กฐํ
console.log(m.get(d)); // e
m.size; // size๋ก ์์ฑ ๊ฐ์ ์กฐํ
console.log(m.size) // 3
for (const [k, v] of m) { // ๋ฐ๋ณต๋ฌธ์ ๋ฐ๋ก ๋ฃ์ด ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
console.log(k, v); // 'a', 'b', 3, 'c', {}, 'e'
} // ์์ฑ ๊ฐ์ ์์๋ ๋ณด์ฅ๋ฉ๋๋ค.
m.forEach((v, k) => { // forEach๋ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
console.log(k, v); // 'a', 'b', 3, 'c', {}, 'e'
});
m.has(d); // has(ํค)๋ก ์์ฑ์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค.
console.log(m.has(d)); // true
m.delete(d); // delete(ํค)๋ก ์์ฑ์ ์ญ์ ํฉ๋๋ค.
m.clear(); // clear()๋ก ์ ๋ถ ์ ๊ฑฐํฉ๋๋ค.
console.log(m.size); // 0
const s = new Set();
s.add(false); // add(์์)๋ก Set์ ์ถ๊ฐํฉ๋๋ค.
s.add(1);
s.add('1');
s.add(1); // ์ค๋ณต์ด๋ฏ๋ก ๋ฌด์๋ฉ๋๋ค.
s.add(2);
console.log(s.size); // ์ค๋ณต์ด ์ ๊ฑฐ๋์ด 4
s.has(1); // has(์์)๋ก ์์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค.
console.log(s.has(1)); // true
for (const a of s) {
console.log(a); // false 1 '1' 2
}
s.forEach((a) => {
console.log(a); // false 1 '1' 2
})
s.delete(2); // delete(์์)๋ก ์์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
s.clear(); // clear()๋ก ์ ๋ถ ์ ๊ฑฐํฉ๋๋ค.
??(๋ ๋ณํฉ) ์ฐ์ฐ์์ ?.(์ต์ ๋ ์ฒด์ด๋) ์ฐ์ฐ์๋ ES2020์์ ์ถ๊ฐ๋ ์ฐ์ฐ์๋ค์ ๋๋ค.
const a = 0;
const b = a || 3; // || ์ฐ์ฐ์๋ falsy ๊ฐ์ด๋ฉด ๋ค๋ก ๋์ด๊ฐ
console.log(b); // 3
const c = 0;
const d = c ?? 3; // ?? ์ฐ์ฐ์๋ null๊ณผ undefined์ผ ๋๋ง ๋ค๋ก ๋์ด๊ฐ
console.log(d); // 0;
const e = null;
const f = e ?? 3;
console.log(f); // 3;
const g = undefined;
const h = g ?? 3;
console.log(h); // 3;
const a = {}
a.b; // a๊ฐ ๊ฐ์ฒด์ด๋ฏ๋ก ๋ฌธ์ ์์
const c = null;
try {
c.d; // undefined
} catch (e) {
console.error(e); // TypeError : Cannot read properties of null (reading 'd')
}
c?.d; // ๋ฌธ์ ์์
try {
c.f(); // undefined
} catch (e) {
console.error(e); // TypeError : Cannot read properties of null (reading 'd')
}
c?.f(); // ๋ฌธ์ ์์
try {
c[0]; // undefined
} catch (e) {
console.error(e); // TypeError : Cannot read properties of null (reading 'd')
}
c?.[0]; // ๋ฌธ์ ์์
โ ์ต์ ๋ ์ฒด์ด๋ ์ฐ์ฐ์๋ TypeError: Cannot read properties of undefined ๋๋ null ์๋ฌ์ ๋ฐ์ ๋น๋๋ฅผ ํ๊ธฐ์ ์ผ๋ก ๋ฎ์ถ ์ ์์ต๋๋ค.
๐ ํจ๊ป ๋ณด๋ฉด ์ข์ ์๋ฃ
https://developer.mozilla.org/ko/docs/Web/JavaScript
https://github.com/tc39/proposals
ํ๋ฐํธ์๋์ ์ฌ์ฉ๋๋ ๋ช ๊ฐ์ง ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฅ๋ค(HTML์์ script ํ๊ทธ ์์ ์์ฑํ๋ ๋ถ๋ถ)์ ์ค๋ช ํฉ๋๋ค.
// GET ์์ฒญ ๋ณด๋ด๊ธฐ
axios.get('<<a href=https://www.zerocho.com/api/get>https://www.zerocho.com/api/get</a>>')
.then((result) => {
console.log(result);
console.log(result.data); // {}
})
.catch((error) => {
console.error(error);
});
// ํ๋ก๋ฏธ์ค์ด๋ฏ๋ก async/await ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ
(async () => {
try {
const result = await axios.get('<<a href=https://www.zerocho.com/api/get>https://www.zerocho.com/api/get</a>>');
console.log(result);
console.log(result.data); // {}
} catch (error) {
console.error(error);
}
})();
// POST๋ฐฉ์์ ์์ฒญ ๋ณด๋ด๊ธฐ
(async () => {
try {
const result = await axios.post('<<a href=https://www.zerocho.com/api/post/json>https://www.zerocho.com/api/post/json</a>>', {
name: 'zerocho',
birth: 1994,
});
console.log(result);
console.log(result.data);
} catch (error) {
console.error(error);
}
})();
<script>
// FormData ์์ฑ์๋ก formData ๊ฐ์ฒด ์์ฑ
const formData = new FormData();
formData.append('name', 'zerocho'); // ํค-๊ฐ ํ์์ ๋ฐ์ดํฐ ์ ์ฅ
formData.append('item', 'orange'); // ํค ํ๋์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ ์ ์ฅ
formData.append('item', 'melon');
formData.has('item'); // true // has: ์ฃผ์ด์ง ํค์ ํด๋นํ๋ ๊ฐ์ด ์๋?
formData.has('money'); // false;
formData.get('item');// orange // ์ฃผ์ด์ง ํค์ ํด๋นํ๋ ๊ฐ ํ๋ ๊ฐ์ ธ์ค๊ธฐ
formData.getAll('item'); // ['orange', 'melon']; ๋ชจ๋ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
formData.append('test', ['hi', 'zero']);
formData.get('test'); // hi, zero
formData.delete('test'); // ํ์ฌ ํค ์ ๊ฑฐ
formData.get('test'); // null
formData.set('item', 'apple'); // ํ์ฌ ํค ์
formData.getAll('item'); // ['apple'];
</script>
// axios๋ก ํผ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์ ์ ์ก
(async () => {
try {
const formData = new FormData();
formData.append('name', 'zerocho');
formData.append('birth', 1994);
const result = await axios.post('<<a href=https://www.zerocho.com/api/post/formdata>https://www.zerocho.com/api/post/formdata</a>>', formData);
console.log(result);
console.log(result.data);
} catch (error) {
console.error(error);
}
})();
(async () => {
try {
const result = await axios.get(`<a href=https://www.zerocho.com/api/search/$>https://www.zerocho.com/api/search/$</a>{encodeURIComponent('๋
ธ๋')}`);
console.log(result);
console.log(result.data); // {}
} catch (error) {
console.error(error);
}
})();
โ ๋ฐ๋ ์ชฝ์์๋ decodeURIComponent๋ฅผ ์ฌ์ฉํ์ฌ ๋ณตํธํํฉ๋๋ค.
<ul>
<li data-id="1" data-user-job="programmer">Zero</li>
<li data-id="2" data-user-job="designer">Nero</li>
<li data-id="3" data-user-job="programmer">Hero</li>
<li data-id="4" data-user-job="ceo">Kero</li>
</ul>
<script>
console.log(document.querySelector('li').dataset); // ์ฒซ๋ฒ์งธ li ํ๊ทธ์ ๋ฐ์ดํฐ์์ฑ์ ์ ๊ทผ
// { id: '1', userJob: 'programmer' }
</script>
โ HTML ํ๊ทธ์ ์์ฑ์ผ๋ก data-๋ก ์์ํ๋ ๊ฒ๋ค์ ๋ฃ์ต๋๋ค.
[์ถ์ฒ] ์กฐํ์, ใNode.js ๊ต๊ณผ์ใ, ๊ธธ๋ฒ(2020), p65-91
๋น์นธ ์ฑ์ฐ๊ธฐ ๋ฌธ์ (๋น์นธ์ ๋๋๊ทธํด์ ์ ๋ต์ ๋งํ ๋ณด์ธ์!)
์ฝ๋ ๋ฌธ์
1. ํ๋ก๋ฏธ์ค๋ฅผ ํ์ฉํด์ ์ ์ฝ๋๋ฅผ ๋ฐ๊ฟ๋ณด์ธ์.
function findAndSaveUser(Users) {
Users.findOne({}, (err, user) => { // ์ฒซ ๋ฒ์งธ ์ฝ๋ฐฑ
if (err) {
return console.error(err);
}
user.name = 'zero';
user.save((err) => { // ๋ ๋ฒ์งธ ์ฝ๋ฐฑ
if (err) {
return console.error(err);
}
});
});
}
function findAndSaveUser(Users) {
Users.findOne({})
.then((user) => {
user.name = 'zero';
return user.save();
})
.catch(err => {
console.error(err);
});
}
2. async/await ๋ฌธ๋ฒ์ ์ฌ์ฉํด ์ ์ฝ๋๋ฅผ ๋ฐ๊ฟ๋ณด์ธ์.
function findAndSaveUser(Users) {
Users.findOne({})
.then((user) => {
user.name = 'zero';
return user.save();
})
.then((user) => {
return Users.findOne({ gender: 'm' });
})
.catch(err => {
console.error(err);
});
}
async function findAndSaveUser(Users) {
try {
let user = await Users.findOne({});
user.name = 'zero';
user = await user.save();
user = await Users.findOne({ gender: 'm' });
} catch (error) {
console.error(error);
}
}
[๋ ธ๋ 2] 6์ฅ. ์ต์คํ๋ ์ค ์น ์๋ฒ ๋ง๋ค๊ธฐ (0) | 2023.11.10 |
---|---|
[๋ ธ๋ 2] 5์ฅ. ํจํค์ง ๋งค๋์ (0) | 2023.11.03 |
[๋ ธ๋ 2] 4์ฅ. http ๋ชจ๋๋ก ์๋ฒ ๋ง๋ค๊ธฐ (0) | 2023.11.03 |
[๋ ธ๋ 2] 3์ฅ. ๋ ธ๋ ๊ธฐ๋ฅ ์์๋ณด๊ธฐ (2) (0) | 2023.10.13 |
[๋ ธ๋ 2] 3์ฅ. ๋ ธ๋ ๊ธฐ๋ฅ ์์๋ณด๊ธฐ (1) (1) | 2023.10.06 |