์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- UX
- for~in/for~of
- Beesbeesbees
- ๋ ธ๋๊ต๊ณผ์
- CSS
- toString#String
- https://developer-talk.tistory.com/299
- children vs childrenNodes
- variable#function
- js
- https://dasima.xyz/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%A0%9C%EA%B3%B1-math-pow-%EA%B3%84%EC%82%B0/
- ํท๊ฐ๋ฆฐ๋ค~
- ์๋ฐ์คํฌ๋ฆฝํธ
- ใทใ
- https://lo-victoria.com/introduction-to-redux-toolkit-for-beginners
- ์๋ฐ์คํฌ๋ฆฝํธ#JS#slice#splice
- https://www.daleseo.com/js-array-slice-splice/
- removeCookie
- ๋ด์ฅ๊ณ ์ฐจํจ์
- UI
- ์๋ฐ์คํฌ๋ฆฝํธ#์กฐ๊ฑด๋ฌธ#๋ฌธ์์ด
- ์๋ฐ์คํฌ๋ฆฝํธ#JS#var#let#const#undefined#null
- dom
- JS#3์ผ์ฐจ๋ฌ๋ฆฌ์#์ด๋ฐ์ธ๋ฐ#์๊ฐ๊ธ๋ฐฉ~
- cmarket
- slice/splice/split
- User Flow
- react
- redux์ํ์ ์ง
- @redux-toolkit
- Today
- Total
Daily Front_Minhhk
[JS] ํ์ด๋จธAPI[setTimeout,setInterval() ] / (node.js)-fs.readFile(path[, options], callback) ๋ณธ๋ฌธ
[JS] ํ์ด๋จธAPI[setTimeout,setInterval() ] / (node.js)-fs.readFile(path[, options], callback)
Minhhk 2022. 11. 24. 00:57๐ ์ฌ์ฌ ๋น๋๊ธฐ ์๊ฐ ๋ถํฐ ์์ํด์ ๋จธ๋ฆฌ๊ฐ ๋ณต์ก๊ณผ ์ด๋ ต๊ธฐ ์์ํ๋ค.. ์์ผ๋ก ์๋ฒ ์ฃผ๊ณ ๋ฐ๊ณ ๋คํธ์ํฌ ํ์ฑ์ด๋ผ๊ณ ํด์ผํ๋? ํ ๋ ค๋ฉด ๋น๋๊ธฐ ๊ณ์ ์ธํ ๋ฐ… ๊ทน๋ณตํด์ผํ๋ค ํ๊ฒ ์ง?
ํ์ด๋จธ ๊ด๋ จ API
setTimeout(), clearTimeout() // setInterval(), clearInterval(id)
setTimeout(callback, millisecond)
์ผ์ ์๊ฐ ํ์ ํจ์๋ฅผ ์คํ
- ๋งค๊ฐ๋ณ์(parameter): ์คํํ ์ฝ๋ฐฑ ํจ์, ์ฝ๋ฐฑ ํจ์ ์คํ ์ ๊ธฐ๋ค๋ ค์ผ ํ ์๊ฐ (๋ฐ๋ฆฌ์ด)
- return ๊ฐ: ์์์ ํ์ด๋จธ ID
setTimeout(function () {
console.log('1์ด ํ ์คํ');
}, 1000);
// 123
clearTimeout(timerId)
setTimeout ํ์ด๋จธ๋ฅผ ์ข ๋ฃ
- ๋งค๊ฐ๋ณ์(parameter): ํ์ด๋จธ ID
- return ๊ฐ: ์์
const timer = setTimeout(function () {
console.log('10์ด ํ ์คํ');
}, 10000);
clearTimeout(timer);
// setTimeout์ด ์ข
๋ฃ๋จ.
setInterval(callback, millisecond)
์ผ์ ์๊ฐ์ ๊ฐ๊ฒฉ์ ๊ฐ์ง๊ณ ํจ์๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์คํ
- ๋งค๊ฐ๋ณ์(parameter): ์คํํ ์ฝ๋ฐฑ ํจ์, ๋ฐ๋ณต์ ์ผ๋ก ํจ์๋ฅผ ์คํ์ํค๊ธฐ ์ํ ์๊ฐ ๊ฐ๊ฒฉ (๋ฐ๋ฆฌ์ด)
- return ๊ฐ: ์์์ ํ์ด๋จธ ID
setInterval(function () {
console.log('1์ด๋ง๋ค ์คํ');
}, 1000);
// 345
clearInterval(timerId)
setInterval ํ์ด๋จธ๋ฅผ ์ข ๋ฃ
- ๋งค๊ฐ๋ณ์: ํ์ด๋จธ ID
- return ๊ฐ: ์์
const timer = setInterval(function () {
console.log('1์ด๋ง๋ค ์คํ');
}, 1000);
clearInterval(timer);
// setInterval์ด ์ข
๋ฃ๋จ.
ํ์ต ๋ชฉํ
- callback, Promise, async/await ๊ตฌํ ๋ฐฉ๋ฒ์ ์ดํดํ๋ค.
- Promise ์คํ ํจ์๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ ๊ฐ์ ๋งค๊ฐ๋ณ์ resolve ์ reject๋ฅผ ํ์ฉํ ์ ์๋ค.
- new Promise()๋ฅผ ํตํด ์์ฑํ Promise ์ธ์คํด์ค๊ฐ ์ฌ์ฉํ ์ ์๋ ๋ฉ์๋์ ์ฉ๋๋ฅผ ์ดํดํ๋ค.
- Promise์ ์ธ ๊ฐ์ง ์ํ๋ ๊ฐ๊ฐ ๋ฌด์์ธ์ง ์ค๋ช ํ ์ ์๋ค.
- async/await ํค์๋์ ํจ๊ป ์คํ๋๋ ํจ์๋ ์ด๋ค ํ์ ์ด์ด์ผ ํ๋์ง ์ดํดํ๋ค.
- await ํค์๋๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ด๋ค ๊ฐ์ด ๋ฆฌํด๋๋์ง ์ค๋ช ํ ์ ์๋ค.
ํ์ด๋จธAPI -> part
01_callback.js
const delay = (wait, callback) => {
setTimeout(callback, wait);
}
02_promiseConstructor.js
const sleep = (wait) => {
return new Promise((resolve) => {
setTimeout(() => {
resolve('hello');
}, wait);
});
}
// catch ์ธ๋?
const sleep = (wait) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error('์๋ฌ'));
}, wait);
});
};
script.js
// ์ฝ๋ฐฑ
function runCallback() {
resetTitle();
playVideo();
delay(1000, () => {
pauseVideo();
displayTitle();
delay(500, () => {
highlightTitle();
delay(2000, resetTitle);
});
});
}
// Promise
function runPromise() {
resetTitle();
playVideo();
sleep(1000)
.then((param) => {
console.log(param);
pauseVideo();
displayTitle();
return "world";
})
.then((param) => {
console.log(param);
return sleep(5000);
})
.then(highlightTitle)
.then(sleep.bind(null, 2000))
.then(resetTitle)
.catch(err => { //catch +
console.log(err);
})
}
// async await
async function runAsync() {
resetTitle();
playVideo();
await sleep(1000);
pauseVideo();
displayTitle();
await sleep(500);
highlightTitle();
await sleep(2000);
resetTitle();
}
- Promise ์คํ ํจ์๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ ๊ฐ์ ํ๋ผ๋ฏธํฐ resolve ์ reject ๋ ๊ฐ๊ฐ ๋ฌด์์ ์๋ฏธํ๋์?
- executor๋ resolve ๋ฐ reject ์ธ์๋ฅผ ์ ๋ฌํ ์คํํจ์.
- ๋น๋๊ธฐ ์์ ์ ์คํํ ํ ๋ชจ๋ ์์ ์ ๋๋ด๋ฉด resolve๋ฅผ ํธ์ถํด ํ๋ก๋ฏธ์ค๋ฅผ ์ดํ, ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ reject๋ฅผ ํธ์ถํด ๊ฑฐ๋ถ
- resolve, rejectํจ์์๋ ์ ๋ฌ์ธ์๋ฅผ ๋๊ธธ ์ ์์ต๋๋ค. ์ด๋ ๋๊ธฐ๋ ์ ๋ฌ์ธ์๋ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ ์๋์?
- ํ๋ก๋ฏธ์ค์์ resolve(arg)๊ฐ ์คํ๋ ๊ฒฝ์ฐ.then(arg)๋ฅผ ์ด์ฉํด ์ธ์๋ฅผ ๋ฐ์ ์ ์๋ค.
- ํ๋ก๋ฏธ์ค์์ reject(arg)๊ฐ ์คํ๋ ๊ฒฝ์ฐ.then().catch(arg)๋ฅผ ์ด์ฉํด ์ธ์๋ฅผ ๋ฐ์ ์ ์๋ค.
- new Promise()๋ฅผ ํตํด ์์ฑํ Promise ์ธ์คํด์ค์๋ ์ด๋ค ๋ฉ์๋๊ฐ ์กด์ฌํ๋์? ๊ฐ๊ฐ์ ์ด๋ค ์ฉ๋์ธ๊ฐ์?
- catch()
- ํ๋ก๋ฏธ์ค๊ฐ ๊ฑฐ๋ถ๋๋ค๋ฉด catch()๊ฐ ํธ์ถ๋๊ณ ์ฝ๋ฐฑ์ ๋ฐํ๊ฐ์ ๋ฐ์ ์ ์๋ค.
- then()
- ํ๋ก๋ฏธ์ค๊ฐ ์ดํ๋๋ค๋ฉด then์ ์ด์ฉํด ๋ฐํ๊ฐ์ ์ด์ฉํ ์ ์๊ณ ์ ํ๋ก๋ฏธ์ค๋ฅผ ๋ฐํํ ์๋ ์๋ค..
- finally()
- ํ๋ก๋ฏธ์ค ์ดํ ์ฌ๋ถ์ ๊ด๊ณ์์ด ๋ฌด์กฐ๊ฑด ํธ์ถ๋๋ค.
- reseolve → ์ฑ๊ณต ๊ฐ, reject → ์คํจ ๊ฐ
- catch()
- Promise.prototype.then ๋ฉ์๋๋ ๋ฌด์์ ๋ฆฌํดํ๋์? → resolve์ ์ ๋ฌ์ธ์๋ก ๋๊ฒจ์ค ๊ฐ
...then((data, error) => { })
- Promise.prototype.catch ๋ฉ์๋๋ ๋ฌด์์ ๋ฆฌํดํ๋์? → reject์ ์ ๋ฌ์ธ์๋ก ๋๊ฒจ์ค ๊ฐ
- Promise์ ์ธ ๊ฐ์ง ์ํ๋ ๊ฐ๊ฐ ๋ฌด์์ด๋ฉฐ, ์ด๋ค ์๋ฏธ๋ฅผ ๊ฐ์ง๋์?
- Pending(๋๊ธฐ) : ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ก์ง์ด ์์ง ์๋ฃ๋์ง ์์ ์ํ
- Fulfilled(์ดํ) : ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋์ด ํ๋ก๋ฏธ์ค๊ฐ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐํํด์ค ์ํ
- Rejected(์คํจ) : ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์คํจํ๊ฑฐ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ํ
- await ํค์๋ ๋ค์์ ๋ฑ์ฅํ๋ ํจ์ ์คํ์ ์ด๋ค ํ์
์ ๋ฆฌํดํ ๊ฒฝ์ฐ์๋ง ์๋ฏธ๊ฐ ์๋์?
- Promise ํ์ ์ ๋ฆฌํดํ ๊ฒฝ์ฐ์๋ง ์๋ฏธ๊ฐ ์๋ค.
- await ํค์๋๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์ด๋ค ๊ฐ์ด ๋ฆฌํด๋๋์?
- Promise ์์ fulfill๋ ๊ฐ
- ๋ง์ฝ Promise๊ฐ reject๋๋ฉด, await ๋ฌธ์ reject๋ ๊ฐ
Node.js ๋ชจ๋ ์ฌ์ฉ๋ฒ
Node.js ๋ด์ฅ ๋ชจ๋ (Node.js built-in modules)์๋ ๋ค์ํ ๋ชจ๋์ด ์กด์ฌํฉ๋๋ค. ํ์ผ์ ์ฝ๊ฑฐ๋ ์ ์ฅํ๋ ๊ธฐ๋ฅ ๋ฑ์ ์ ๊ณตํ๋ Node.js ๋ด์ฅ ๋ชจ๋์
File System
๋ชจ๋์ ๋๋ค.
ํ์ผ์ ์ฝ์ ๋๋
readFile
๋ฉ์๋, ํ์ผ์ ์ ์ฅํ ๋๋
writeFile
Node.js ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ์๋จ์ require ๊ตฌ๋ฌธ์ ์ด์ฉํ์ฌ ๋ค๋ฅธ ํ์ผ์ ๋ถ๋ฌ์ฌ ์ ์์ต๋๋ค.
const fs = require('fs'); //ํ์ผ ์์คํ
๋ชจ๋์ ๋ถ๋ฌ์ต๋๋ค.
const dns = require('dns'); // DNS ๋ชจ๋์ ๋ถ๋ฌ์ต๋๋ค.
fs.readFile(path[, options], callback)
→ ๋น๋๊ธฐ์ ์ผ๋ก ํ์ผ ๋ด์ฉ ์ ์ฒด๋ฅผ ์ฝ์ต๋๋ค.
→ ์ด ๋ฉ์๋๋ฅผ ์คํํ ๋์๋ ์ ๋ฌ์ธ์ ์ธ ๊ฐ๋ฅผ ๋ฐ์ต๋๋ค.
- path \<string> | \<Buffer> | \<URL> | \<integer>
path์๋ ํ์ผ ์ด๋ฆ์ ์ ๋ฌ์ธ์๋ก ๋ฐ์ต๋๋ค.
๋ค ๊ฐ์ง ์ข ๋ฅ์ ํ์ ์ ๋๊ธธ ์ ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์์ด(<string>)์ ํ์ ์ ๋ฐ์ต๋๋ค.
filename or file descriptor
๋ค์์ `'etc/passwd' ๋ผ๋ ํ์ผ์ ๋ถ๋ฌ์ค๋ ์์ ์ ๋๋ค.
fs.readFile('/etc/passwd', ..., ...)
- options \<Object> | \<string>
๋๊ดํธ๋ก ๊ฐ์ผ ๋ ๋ฒ์งธ ์ ๋ฌ์ธ์ options๋ ๋ฃ์ ์๋ ์๊ณ , ๋ฃ์ง ์์ ์๋ ์์ต๋๋ค.
๋๊ดํธ๋ ์ ํ์ ์ ๋ฌ์ธ์๋ฅผ ์๋ฏธํฉ๋๋ค.
options๋ ๋ฌธ์์ด ๋๋ ๊ฐ์ฒด ํํ๋ก ๋ฐ์ ์ ์์ต๋๋ค.
๋ฌธ์์ด๋ก ์ ๋ฌํ ๊ฒฝ์ฐ ์ธ์ฝ๋ฉ์ ๋ฐ์ต๋๋ค. ๋ฐ์ ์์ ์์๋ 'utf8' ์ ๋ ๋ฒ์งธ ์ ๋ฌ์ธ์๋ก ๋ฐ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
options๋ฅผ ๊ฐ์ฒด ํํ๋ก ๋ฐ๋ ๊ฒ์ ๋ ๋ฒ์งธ ์์ ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
If options is a string, then it specifies the encoding: →
// /etc/passwd ํ์ผ์ 'utf8'์ ์ฌ์ฉํ์ฌ ์ฝ์ต๋๋ค.
fs.readFile('/etc/passwd', 'utf8', ...);
[์ฝ๋] ๋ ๋ฒ์งธ ์ ๋ฌ์ธ์ options์ ๋ฌธ์์ด์ ์ ๋ฌํ ๊ฒฝ์ฐ
let options = {
encoding: 'utf8', // utf8 ์ธ์ฝ๋ฉ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ค
flag: 'r' // ์ฝ๊ธฐ ์ํด ์ฝ๋๋ค
}
// /etc/passwd ํ์ผ์ options๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ์ต๋๋ค.
fs.readFile('/etc/passwd', options, ...)
[์ฝ๋] ๋ ๋ฒ์งธ ์ ๋ฌ์ธ์ options์ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ ๊ฒฝ์ฐ
- callback \<Function>
- err \<Error> | \<AggregateError>
- data \<string> | \<Buffer>
์ฝ๋ฐฑ ํจ์๋ฅผ ์ ๋ฌํฉ๋๋ค. ํ์ผ์ ์ฝ๊ณ ๋ ํ์ ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋๋ ํจ์์ ๋๋ค.
์ฝ๋ฐฑ ํจ์์๋ ๋ ๊ฐ์ง ๋งค๊ฐ๋ณ์๊ฐ ์กด์ฌํฉ๋๋ค.
์๋ฌ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฉด err ๋ null ์ด ๋๋ฉฐ,
data ์ ๋ฌธ์์ด์ด๋ Buffer ๋ผ๋ ๊ฐ์ฒด๊ฐ ์ ๋ฌ๋ฉ๋๋ค.
data ๋ ํ์ผ์ ๋ด์ฉ์ ๋๋ค.
์ง๋ฌธ: data ์๋ ๋ฌธ์์ด์ด๋ Buffer ๊ฐ ์ ๋ฌ๋ฉ๋๋ค. ์ด๋ค ๊ฒฝ์ฐ์ ๋ฌธ์์ด๋ก ์ ๋ฌ๋๋ ๊ฒ์ผ๊น์? ํํธ๋, ๊ณต์ ๋ฌธ์์ ๋ค์ ๋ด์ฉ์ ๋์ ์์ต๋๋ค.
If no encoding is specified, then the raw buffer is returned. → ์ธ์ฝ๋ฉ์ ์ง์ ํ์ง ์์ผ๋ฉด ์์ ๋ฒํผ๊ฐ ๋ฐํ๋ฉ๋๋ค.
์์ ์ฝ๋ >>
JavaScript ํ์ผ์ด ์คํ๋๋ ๋๋ ํ ๋ฆฌ์, ์ ๋นํ ํ ์คํธ ํ์ผ(test.txt)์ ์๋กญ๊ฒ ์์ฑํ ํ ์คํํ์ธ์.
ํ ์คํธ ํ์ผ์ ๋ด์ฉ์ ์ด๋ค ๊ฒ์ด๋ ๊ด์ฐฎ์ต๋๋ค.
const fs = require("fs"); // fs ์ถ๊ฐ
fs.readFile('test.txt', 'utf8', (err, data) => {
if (err) {
throw err; // ์๋ฌ๋ฅผ ๋์ง๋๋ค.
}
console.log(data);
});
// node test.js -> test.txt ๋ด์ฉ(asdfasdfasdf) ์ถ๋ ฅ
// asdfasdfasdf
'Code๊ฐ๋ฐ์ผ์ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] fetch API...sprint (0) | 2022.11.25 |
---|---|
[JS] fs๋ชจ๋ (part-2) (0) | 2022.11.25 |
[JS] ๋น๋๊ธฐ[callBack, Promise, async-await] (0) | 2022.11.24 |
[JS] {Beesbeesbees}, super, extends, class, constructor( ),get-set (0) | 2022.11.21 |
[JS] ํ๋กํ ํ์ , ์ฒด์ธ (0) | 2022.11.18 |