Await, Promise 및 Promise 메서드
5827 단어 awaithttpjavascriptpromises
Promise
사용하지 않아도 여전히 가치 있고 강력한 이유를 살펴보았습니다..then()
기다리다
따라서 await
에 대한 경고는 기술적으로 async
함수 내부 작업으로 제한됩니다. 이것은 의도적으로 해결 방법이 있지만 처음에는 시행되는 관행을 고수하십시오. 결국 코딩은 실험하고 깨고 만드는 것 😆
실행 일시 중지
따라서 키워드 await
는 약속이 해결될 때까지 async
함수의 실행을 일시 중지합니다... 즉, 다음에서 무언가가 반환될 때까지const data = await APICall()
및 data
변수에는 이제 해결된 약속의 반환 값이 포함됩니다. Promise가 거부되면 예외가 발생합니다. await
만으로는 오류를 정상적으로 처리하지 못하지만 오류 경계를 만들 수 있지만 try/catch
블록을 사용하는 것을 선호합니다.
평행한
이것은 Promise.all([call1, call2])
여러 비동기 호출을 해결하는 기능에 대해 조금 이야기했지만 다시 살펴보겠습니다. 따라서 각각이 마지막 이후에 해결될 때까지 기다리지 마십시오. 이것은 차례로 await
단독으로 실행 차단으로 관찰되는 동기와 유사한 동작을 제거합니다. 둘 다 다른 것보다 낫지 않지만 다양한 사용 사례에 대한 장점과 단점이 있습니다.
예
// Pausing Execution - numbers indicate milliseconds for data to return
async function somethingMakingApiCall() {
const dataFirst = await callFirst(10) // pause 10ms
const dataSec = await callSec(1) // pause 1ms
const dataThird = await callThird(5) // pause 5ms
// 16ms later reaches this return with resolved data.
return [dataFirst, dataSec, dataThird]
}
// The order of data returned is irrelevant, // execution order is the same.
console.log(somethingMakingApiCall()) // [ 10ms, 1ms, 5ms ]
// Parallel -- What's the benefit?
async function somethingMakingApiCall() {
// All calls are executing in Promise.all() so no pause for each occurs.
const [ first, sec, third ] = await Promise.all([ callFirst(10), callSec(10), callThird(10) ])
// 10ms later the function execution
// reaches return with resolved data.
return [ first, sec, third ];
}
console.log(somethingMakingApiCall()) // 10ms, 10ms, 10ms
약속
이 기사와 이전 기사에서 이미 Promise.all()
언급했습니다. 그래서 fail-fast
가 거부했다면 call first(10)
를 간단히 언급하겠습니다. 그러면 모든 것이 즉시 터져 그 거부를 던집니다. 상황에 따라 문제가 될 수도 있고 강력한 기능이 될 수도 있습니다. 예를 들어 2번째 및 3번째 호출은 1번째 호출 성공에 의존하므로 거부하면 두 번 더 호출하여 시간을 낭비할 필요가 없습니다 😁
## 약속 API
따라서 Promise 메서드가 많이 있습니다. you can find on MDN
내 의견으로는 async/await가 있는 주목할만한 것들:
// Pausing Execution - numbers indicate milliseconds for data to return
async function somethingMakingApiCall() {
const dataFirst = await callFirst(10) // pause 10ms
const dataSec = await callSec(1) // pause 1ms
const dataThird = await callThird(5) // pause 5ms
// 16ms later reaches this return with resolved data.
return [dataFirst, dataSec, dataThird]
}
// The order of data returned is irrelevant, // execution order is the same.
console.log(somethingMakingApiCall()) // [ 10ms, 1ms, 5ms ]
// Parallel -- What's the benefit?
async function somethingMakingApiCall() {
// All calls are executing in Promise.all() so no pause for each occurs.
const [ first, sec, third ] = await Promise.all([ callFirst(10), callSec(10), callThird(10) ])
// 10ms later the function execution
// reaches return with resolved data.
return [ first, sec, third ];
}
console.log(somethingMakingApiCall()) // 10ms, 10ms, 10ms
이 기사와 이전 기사에서 이미
Promise.all()
언급했습니다. 그래서 fail-fast
가 거부했다면 call first(10)
를 간단히 언급하겠습니다. 그러면 모든 것이 즉시 터져 그 거부를 던집니다. 상황에 따라 문제가 될 수도 있고 강력한 기능이 될 수도 있습니다. 예를 들어 2번째 및 3번째 호출은 1번째 호출 성공에 의존하므로 거부하면 두 번 더 호출하여 시간을 낭비할 필요가 없습니다 😁## 약속 API
따라서 Promise 메서드가 많이 있습니다. you can find on MDN
내 의견으로는 async/await가 있는 주목할만한 것들:
"일부 컴퓨터에서는 병렬로 실행되거나 어떤 의미에서는 동시에 실행될 수 있지만 다른 컴퓨터에서는 직렬로 실행될 수 있습니다. 이러한 이유로 Promise 실행 순서에 대한 의존성이 없어야 합니다."- MDN related article
나는 이전에 유사 동시성/병렬성을 언급한 적이 있는데 이 발췌문은 그 이유를 잘 설명하고 있습니다.
"...method는 iterable의 약속 중 하나가 해당 약속의 값이나 이유를 이행하거나 거부하는 즉시 이행하거나 거부하는 약속을 반환합니다."- MDN related article
"Promise 객체의 iterable을 취하고 iterable의 Promise 중 하나가 이행되자마자 해당 Promise의 값으로 해결되는 단일 Promise를 반환합니다."- MDN related article
Reference
이 문제에 관하여(Await, Promise 및 Promise 메서드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jacobmgevans/promises-promise-methods-2dj9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)