: 동기는 말 그대로 동시에 일어난다는 뜻입니다. 요청과 그 결과가 동시에 일어난다는 약속인데요. 바로 요청을 하면 시간이 얼마가 걸리던지 요청한 자리에서 결과가 주어져야 합니다.
: 비동기는 동시에 일어나지 않는다를 의미합니다. 요청과 결과가 동시에 일어나지 않을거라는 약속입니다.
블록: 학생이 시험지를 선생에게 건넨 후 가만히 앉아 채점이 끝나서 시험지를 돌려받기만을 기다린다면 학생은 블록 상태
논블록: 생이 시험지를 건넨 후 선생에게 채점이 완료되었다는 전송을 받기 전까지 다른 과목을 공부한다거나 게임을 한다거나 다른 일을 하게 되면 학생의 상태는 논블록 상태
출처: https://private.tistory.com/24 [공부해서 남 주자]
내용이 실행은 되었지만 결과를 반환하지 않은 객체
then, catch를 만나게 되면 그 결과값을 반환함
promise 변수 안에 담은 것은 동기로 실행
- Resolve(성공리턴값) -> then으로 연결
- Reject(실패리턴값) -> catch로 연결
- 성공/실패 상관없이 Finally 부분은 무조건 실행됨
예제코드
const condition = true;
const promise = new Promise((resolve,reject) => {
if (condition) {
resolve('성공');
} else {
reject('실패');
}
}
//다른 코드가 들어갈 수 있음
promise
.then((message) => {
console.log(message);
})
.catch((error) => {
console.log(error);
출처: https://www.youtube.com/watch?v=3Ao3OroqQLQ&list=PLZKTXPmaJk8JZ2NAC538UzhY_UNqMdZB4&index=16
asynchronous(비동기, 동시에 일어나지 않는)
: 정보를 일정한 속도로 보낼 것을 요구하지 않는 데이터 전송 방법
async function findAndSaveUser(Users) {
let user = await Users.findOne({});
//await 실행 후 user 에 객체 담음 (await 실행 후 왼쪽 user에 결과값 할당)
user.name = 'zero';
user = await user.save();
// await 실행 후 user에 저장
user = await Users.findOne({ gender: 'm' });
}
function findAndSaveUser(Users) {
Users.findOne({})
.then((user) => {
user.name = 'zero';
return user.save();
})
.then(user) => {
return.Users.findOne({ gender: 'm' });
})
.then(user) => {
//생략
})
catch~~~~~
async functuin findAndSaveUser(User) {
//생략
}
findAndSaveUser().then() => {});
//또는
async function other() {
const result = await findAndSaveUser();
}