// const a =new Promise(function(성공시호출함수, 실패시호출함수) {
//성공,실패 동작을 구현
//}
const promiseTest = param => new Promise((resolve, reject) => {
setTimeout(() => {
if (param) {
resolve("해결 완료")
} else {
reject(Error("실패!!"))
}
}, 1000)
})
const testRun = param => promiseTest(param) //Promise 인스턴스
.then(text => { console.log(text) }) //성공(resolve)일때 .then을 실행한다. 파라미터(text)에는 성공했을때 값이 들어온다.
.catch(error => { console.error(error) })// 실패(reject)했을때 실행
const a = testRun(true) // Promise {<resolved>: undefined}
a.then(res => {return 1}) // Promise {<resolved>: 1}
a.then(res => {return 1}).then(res => {console.log(res+1)}) // Promise {<resolved>: 2} 계속 이어감
const b = testRun(false)
new Promise(function)
.then()
, .catch()
는 언제나 promise를 반환한다.const executer = (resolve, reject) => { ... }
const prom = new Promise(executer)
const onResolve = res => { ... }
const onReject = err => { ... }
// (1)
prom.then(onResolve, onReject)
// (2)
prom.then(onResolve).catch(onReject)
두번째 방법 catch 따로 명시 하는 방법을 추천한다.
const simplePromiseBuilder = value => {
return new Promise((resolve, reject) => {
if(value) { resolve(value) }
else { reject(value) }
})
}
//아니.. promise 인스턴스를 쓸때마다 .then .catch 를 써줘야 하나..?
simplePromiseBuilder(1)
.then(res => { console.log(res) })
.catch(err => { console.error(err) })
simplePromiseBuilder(0)
.then(res => { console.log(res) })
.catch(err => { console.error(err) })
const simplePromiseBuilder2 = value => {
return new Promise((resolve, reject) => {
if(value) { resolve(value) }
else { reject(value) }
})
//짜잔 빌더 안쪽에서 명시해준다.
.then(res => { console.log(res) })
.catch(err => { console.error(err) })
}
simplePromiseBuilder2(1) //훨씬 깔끔
simplePromiseBuilder2(0)
const prom = new Promise((resolve, reject) => {
resolve()
reject()
console.log('Promise')
})
prom.then(() => {
console.log('then')
})
prom.catch(() => {
console.log('catch')
})
console.log('Hi!')
// Promise -> Hi -> then
전체 소스 실행하는 과정(Promise -> HI) 에서 Promise인스턴스의 함수(resolve())도 같이 실행 fulfilled가 되면서 .then 함수 실행('then') 이후 fulfilled 상태이기 때문에 reject 무시
const prom = new Promise((resolve, reject) => {
//순서 바꾸기
reject()
resolve()
console.log('Promise')
})
prom.then(() => {
console.log('then')
})
prom.catch(() => {
console.log('catch')
})
console.log('Hi!')
//Promis -> HI -> catch
바로 fulfilled 상태에서 값이나 식을 넘겨줘서 표현할수도 있다.
Promise.resolve(42)
.then(res => { console.log(res) }) //42
.catch(err => { console.error(err) })
Promise.reject(12)
.then(res => { console.log(res) })
.catch(err => { console.error(err) }) //에러 12
const thenable = {
then (resolve, reject) {
resolve(33)
}
}
const prom = Promise.resolve(thenable)
prom.then(res => { console.log(res) })
const thenable = {
then (resolve, reject) {
reject(33)
}
}
const prom = Promise.resolve(thenable)
prom.catch(err => { console.log(err) })