2023.3.4 study
참조 https://ko.javascript.info
https://yoo11052.tistory.com/155
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Promise/Promise
promises().then().catch();
async().await()
비동기
작업의 최종 완료 또는 실패를 나타내는 객체이다.(resolve)가 호출된 경우
또는 실패(rejected)reject함수가 호출된 경우 실패
상태 정보를 갖게 된다. $.ajax({..}) /// promise x
axios({...}) /// promise o
new Promise(executor)
const promise = () => new Promise((resolve, reject) => {
let a = 1 + 1
if(a == 2) {
resolve('success')
} else {
reject('failed')
}
})
promise().then((message) => {
console.log('This is in the then ' + message) //성공일때
}).catch((message) => {
console.log('This is in the catch' + message) // 에러일때
})
const promise = () => new Promise((resolve, reject) => {
let a = 1 + 1
if(a == 3) {
resolve('success')
} else {
reject('failed')
}
})
promise().then((message) => {
console.log('This is in the then ' + message)//성공
}, (error) => {
console.log('This is in the then ' + error)//실패
})
const promise = (result) => {
return new Promise((resolve, reject) => {
if(result == 'success')
resolve('success')
else
reject('failed')
})
}
promise('success')
.then(promise) // .then(result => promise(result))
.then(message => console.log('This is in the then ' + message))
.catch(error => console.log('This is in the catch ' + error))
const promise = Promise.resolve('success') // new Promise(resolve => resolve('success'))
promise.then(message => console.log('This is in the then ' + message))
///This is in the then success
const promise = Promise.reject('failed') // new Promise((resolve, reject) => reject('failed'))
promise.catch(error => console.log('This is in the catch ' + error))
///This is in the catch failed
병렬로 처리하고
그 결과값을 배열에 담아 resolve로 반환한다./// promise.all() 사용하지 않을 때
const promise1 = () => new Promise(resolve => setTimeout(() => resolve(1), 1000))
const promise2 = () => new Promise(resolve => setTimeout(() => resolve(2), 2000))
const promise3 = () => new Promise(resolve => setTimeout(() => resolve(3), 3000))
promise1().then(result => {
console.log(result) // 프로그램을 실행하고 1초뒤에 수행됨
return promise2()
}).then(result => {
console.log(result) // 프로그램을 실행하고 3초뒤에 수행됨 (1 + 2)
return promise3()
}).then(result => {
console.log(result) // 프로그램을 실행하고 6초뒤에 수행됨 (1 + 2 + 3)
})
/// 1
/// 2
/// 3
/// promise.all() 사용할 때
Promise.all([
new Promise(resolve => setTimeout(() => resolve(1), 1000)),
new Promise(resolve => setTimeout(() => resolve(2), 2000)),
new Promise(resolve => setTimeout(() => resolve(3), 3000))
]).then(console.log) // 프로그램을 실행하고 3초뒤에 실행됨
.catch(console.log)
/// 1, 2 , 3
Promise.race([
new Promise(resolve => setTimeout(() => resolve(1), 1000)),
new Promise(resolve => setTimeout(() => resolve(2), 2000)),
new Promise(resolve => setTimeout(() => resolve(3), 3000))
]).then(console.log)
.catch(console.log)
/// 1
Promise.allSettled([
new Promise(resolve => setTimeout(() => resolve(1), 1000)),
new Promise((resolve, reject) => setTimeout(() => reject(2), 2000))
]).then(console.log)
/// [
/// { status: 'fulfilled', value: 1 },
/// { status: 'rejected', reason: 2 }
/// ]
async function name([param[, param[, ... param]]]) {
statements
}
/// promise().than.catch
const timeout = (value, timeout) => new Promise((resolve, reject) => {
setTimeout(() => resolve(value), timeout)
})
timeout('Hello ', 1000) // 프로그램 실행후 1초뒤에 수행됨
.then(result => {
console.log('complete promise')
return timeout(result + 'My Name is ', 2000) // 프로그램 실행후 3초뒤에 수행됨(1 + 2)
}).then(result => {
console.log('complete promise')
return timeout(result + 'seonsim ', 3000) // 프로그램 실행후 6초뒤에 수행됨(1 + 2 + 3)
}).then(result => {
console.log('complete promise')
console.log(result)
})
/// complete promise
/// complete promise
/// complete promise
/// Hello My name is seonsim
-----------------------------------------------------------
/// async().await
const timeout = (value, timeout) => new Promise((resolve, reject) => {
setTimeout(() => resolve(value), timeout)
})
async function awaitFunc() {
let str = ''
str += await timeout('Hello ', 1000) // 프로그램 실행후 1초뒤에 수행됨
console.log('complete promise')
str += await timeout('My name is ', 2000) // 프로그램 실행후 3초뒤에 수행됨(1 + 2)
console.log('complete promise')
str += await timeout('seonsim ', 3000) // 프로그램 실행후 6초뒤에 수행됨(1 + 2 + 3)
console.log('complete promise')
return str
}
awaitFunc().then(console.log)
/// complete promise
/// complete promise
/// complete promise
/// Hello My name is seonsim
async function promise() {
throw 'rejected';
}
async function exceptionFunc() {
try {
await promise()
} catch (e) {
console.log('catch error!', e)
}
}
exceptionFunc()
///catch error! rejected
async function promise() {
throw 'rejected';
}
async function exceptionFunc() {
try {
return await promise()
} catch (e) {
console.log('catch error!', e)
throw e
}
}
exceptionFunc()
.then(result => console.log('status : fulfilled,', result))
.catch(error => console.log('status : rejected,', error))
//catch error! rejected
//status : rejected, rejected
정리하면서...
자바스크립트는 동적 언어이고 그래서 다양한 데이터들을 생성할 수 있는데 다양한 메소드를 잘 활용하기 위해서는 꼭 메소드들 문법 잘 알아야 겠고, 바뀐 문법들에 대해서도 찾아보고 원서를 잘 봐야할거 같다.