node-mysql 비동기 조작 실현 (상)
Promise 객체의 세 가지 상태
4
기본 사용
Promise 정의 후, Resolve와 Reject 두 개의 매개 변수가 있는데, 각각 pending->fulfilled 상태와 pending->rejected 상태에 대응한다
//
const promise = new Promise(function(resolve, reject) {
//
// ,
if (/* */){
resolve(value);
} else {
reject(error);
}
});
실행할 때, Resolve를 실행하든 Reject를 실행하든, 되돌아오는 것은 모두 Promise 대상입니다. Promise 대상의 값을 가져오려면 then에서 가져오십시오.then은 Promise 대상의 Resolve 매개 변수와 Reject 매개 변수에 대응하는 두 가지 함수가 있습니다
//
promise.then(function(resolve){
...
},function(reject){
...
})
아날로그 비동기 조작의 예
const timeout = (ms) => {
return new Promise((resolve, reject) => {
resolve('done job')
});
}
console.log(timeout(100)) // Promise { 'done job' }
timeout(100).then(res => {
console.log(res) // done job
})
곰곰이 생각해 보면promise 대상의 데이터는then에서 데이터를 얻을 수 있지만then이라는 체인 호출은 리셋 지옥을 초래할 수 있다. 동기화 함수처럼 조작해서timeout(100)을 직접 리셋 값으로 만들 수 있다면 더욱 좋다.ES2017 표준은 async 함수를 도입하여 async 함수에서 프로미스 대상을 사용하기 전에 await를 사용하면 프로미스 대상에서 데이터를 직접 얻을 수 있다.
위의 예를 수정하다
async 함수에서 인쇄한 값은then에서 인쇄한 값과 똑같습니다
const timeout = (ms) => {
return new Promise((resolve, reject) => {
resolve('done job')
});
}
console.log(timeout(100)) // Promise { 'done job' }
timeout(100).then(res => {
console.log(res) // done job
})
const getStr = async () => {
const str = await timeout(100);
console.log(str) // done job
}
getStr()
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Express + AWS S3 이미지 업로드하기웹 사이트 및 모바일 애플리케이션 등에서 원하는 양의 데이터를 저장하고 보호할 수 있다. 데이터에 대한 액세스를 최적화, 구조화 및 구성할 수 있는 관리 기능을 제공한다. AWS S3 에 저장된 객체에 대한 컨테이너...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.