1.Promise 실행 함수가 가지고 있는 두 개의 파라미터 resolve 와 reject 는 각각 무엇을 의미하나요?
resolve는 true와 유사한 느낌 promise에서 다음 액션으로 넘기는 것이고
reject는 false와 유사한 느낌 에러를 핸들링할 수 있다.
2.resolve, reject함수에는 전달인자를 넘길 수 있습니다. 이때 넘기는 전달인자는 어떻게 사용할 수 있나요? (실습)
resolve 또는 reject에서 받은 전달인자를 매개변수로 받아 그 함수의 전달인자로 넣어준다.
3.new Promise()를 통해 생성한 Promise 인스턴스에는 어떤 메서드가 존재하나요? 각각은 어떤 용도인가요?
Promise.resolve() = 주어진 값으로 이행하는 Promise 객체를 반환합니다.
Promise.reject(reason) = 주어진 사유로 거부하는 Promise 객체를 반환합니다.
Promise.all(iterable) = 주어진 모든 프로미스가 이행하거나, 한 프로미스가 거부될 때까지 대기하는 새로운 프로미스를 반환합니다. 거부된 경우 reject의 첫 번째 이유를 매개변수로 사용
Promise.allSettled(iterable)=주어진 모든 프로미스가 처리(이행 또는 거부)될 때까지 대기하는 새로운 프로미스를 반환합니다. 결과값은 각각의 상태와 값(또는 거부 사유)을 모아놓은 배열로 이행합니다.
Promise.race(iterable) =주어진 모든 프로미스 중 하나라도 처리될 때까지 대기하는 프로미스를 반환합니다.
Promise.any(iterable) (en-US) = race와 비슷하지만 (아마도) api에서 처리를 한 후 가장 빠른 값 (rejcet or resolve)을 이행하는 새로운 프로미스를 반환한다.
Promise.prototype.catch() = reject가 나온 경우 에러핸들링을 하는 메서드
Promise.prototype.then() = 앞의 프로미스를 수행한 다음 시행하라는 메서드(로추정)
Promise.prototype.finally() = 프로미스의 이행과 거부 여부에 상관없이 처리될 경우 항상 호출되는 처리기 콜백을 추가하고, 이행한 값 그대로 이행하는 새로운 프로미스를 반환합니다.
4.Promise.prototype.then 메서드는 무엇을 리턴하나요? = 프로미스를 반환하기 때문에, 체이닝이 가능합니다. 이를 합성이라고도 합니다.
5.Promise.prototype.catch 메서드는 무엇을 리턴하나요? (실습) = 프로미스를 반환하기 때문에, 체이닝이 가능합니다. 이를 합성이라고도 합니다. //이건 정의부분
catch는 resolve값이 들어오면 그대로 받은 값(프로미스)를 반환하고
만약 reject값이 들어온다면 catch에 미리 설정해둔 에러처리방식에 따라 처리된다.
6.Promise의 세 가지 상태는 각각 무엇이며, 어떤 의미를 가지나요?
promise는 Pending(대기), Fulfilled(이행), Rejected(실패)의 세가지 상태가 있다. 기본적으로 대기는 로딩중이라고 볼 수 있고 그 뒤로 resolve/reject 여부에 따라 Fulfilled/Rejected 중 작동할 내용이 결정된다.
7.await 키워드 다음에 등장하는 함수 실행은 어떤 타입을 리턴할 경우에만 의미가 있나요?
await를 사용하기 위해서는 async를 사용해야만 합니다. async가 아닌 경우에는 동기적으로 사용하는 await를 사용하지 않아도 이미 동기적으로 처리됩니다.
8.await 키워드를 사용할 경우, 어떤 값이 리턴되나요? (실습)
실습은 해봤지만 undefined로 나오기 때문에 정확한 결과는 알 수 없었다.
await 문의 반환값은 Promise 에서 나온 값으로
만약 성공이라면 fulfill된 값인 resolve가 되고
실패한 경우에는 reject이기 때문에 reject된 값을 throw합니다.
9. fs의 readFile을 사용하는 방법은 아래와 같다.
fs.readFile(path, [options], callback) //options는 선택으로 안넣어도 가능
fs.readFile('test.txt', 'utf8', (err, data) => { //하지만 'utf8'을 넣어주는 편이 좋다.
if (err) {
throw err; // 에러를 던집니다.
}
console.log(data);
});
10.Node 관련
Node.js 에서는 JavaScript 코드 가장 상단에 require 구문을 이용하여 다른 파일을 불러옵니다.
const fs = require('fs'); // 파일 시스템 모듈을 불러옵니다
const dns = require('dns'); // DNS 모듈을 불러옵니다
// 이제 fs.readFile 메서드 등을 사용할 수 있습니다!
3rd-party 모듈을 사용하는 방법
npm install underscore //터미널에서 설치
const _ = require('underscore'); //JS상단에 적기
파일을 읽거나 저장하는 기능 등을 제공하는 Node.js 내장 모듈은 File System 모듈입니다.
파일을 읽을 때는 readFile 메서드, 파일을 저장할 때는 writeFile 메서드를 사용합니다.
11. delay를 주고 싶은 경우...? 아래와 같이 setTimeout을 준다.
const delay = (wait, callback) => {
setTimeout(callback, wait);
}
12. 프로미스는 아래 처럼 만들 수 있다. resolve / reject / noaml
new Promise((resolve) => {
setTimeout(() => {
resolve('hi')
}, wait)
})
-----------------------------
new Promise((eject) => {
setTimeout(() => {
reject(new Error('에러'));
}, wait);
})
}
-----------------------------
new Promise((resolve, reject) => {
function(){
if(err){
reject(err);
}else{
resolve('hi')
}
})
})
13. JSON.parse()는 문자열을 JSON으로서 구문 분석하고, 선택적으로 분석 결과의 값과 속성을 변환해 반환합니다. JSON으로 변경할 객체들로 구성된 배열은 만든 후 아래와 같이 사용하면 처리하기 편합니다.
return result.map((el) => JSON.parse(el));
전체적으로 복잡한 내용이 많이 들어있는 것 같다.
프로미스의 사용은 내일도 과제가 있지만 주말에 더 많이 복습해야겠다.
'회고' 카테고리의 다른 글
| 예습(react 기초) (0) | 2022.06.01 |
|---|---|
| [JS/Node]비동기, Node.js (0) | 2022.05.31 |
| 복습(underbar, class) (0) | 2022.05.29 |
| 복습(고차함수) (0) | 2022.05.28 |
| [JS/Node] 비동기 (0) | 2022.05.27 |
