하나는 사용하는 비동기 사용에 포함하는 기능을 키워드 await를을 함수 본체 내부.
async function fetchMovies() {
const response = await fetch('/movies');
console.log(response);
}
fetchMovies();
AWAIT은 비동기 완료를 차단하는 데 사용되는 페치 () 호출. 코드에서 볼 수 있듯이 fetchMovies () 함수 는 값을 반환하지 않습니다. 그리고 그렇게하더라도 호출자가 반환 값을 사용하는 방식에 영향을 미칠 수 있지만 함수 본문에서 다른 비동기 호출을 호출하는 데 왜 중요할까요?
내 질문은 이것이 왜 필요한 것입니까? 그것에 대한 좋은 설명이 있습니까? await의 실제 구현의 필요성 과 이전 JavaScript 버전에서 지원하는 것과 관련이 있습니까?
나는 iffi 패턴이 사용되어 await 를 사용할 수 있다는 것을 알고 있지만 어떤 식 으로든 iffi 코드 블록 을 따르는 코드의 의미를 변경 합니까?
(async () => {
const response = await fetch('/movies');
console.log(response);
})();
나는 또한 모듈에서 지원되는 최상위 레벨을 알고 있습니다 .
정말 분명한 것을 놓치고있을 수 있습니다.
async
키워드가 존재하는 이유는 세 가지입니다 .
2015 년 이전의 ECMAScript 언어 버전에서는 await
키워드가 아닙니다. 함수를 표시하면 함수 async
본문 내 언어 문법의 주요 변경 사항을 나타내는 구문 "구제"가 제공됩니다.
이것이 가장 중요한 이유입니다. async
키워드가 없으면 ECMAScript 5 또는 이전 버전으로 작성된 모든 프로그램이 await
키워드를 변수로 사용하면 더 이상 작동하지 않습니다 (실제로 이는 일부 경우 async
/ await
표준화 이전에 폴리 필로 의도적으로 수행 되었음 ). async
사양에 추가하지 않고 . 이 때문에 async
는 언어 변경을 방지하기 위해 구문 상 필요합니다 .
함수가 비동기인지 여부를 결정하기 위해 무한 예측을 피하면서 파서에 편리한 마커를 제공합니다.
이것은 구문 분석을 더 효율적으로 만들어 ECMAScript 구현 자와 개발자 모두에게 매력적이지만,이 이유만으로는 async
구문에 꼭 필요한 것은 아닙니다 .
async
또한 await
키워드가 본문 에 있는지 여부에 관계없이 수행되는 함수에 대한 자체 변환을 수행합니다 .
다음 두 가지 기능을 고려하십시오.
function foo() {
if (Math.random() < 0.5) {
return 'return';
} else {
throw 'throw';
}
}
async function bar() {
if (Math.random() < 0.5) {
return 'return';
} else {
throw 'throw';
}
}
async
의 다음 변환을 수행합니다 function bar()
.
function bar() {
return new Promise((resolve, reject) => {
try {
resolve((/*async function bar*/() => {
if (Math.random() < 0.5) {
return 'return';
} else {
throw 'throw';
}
})());
} catch (reason) {
reject(reason);
}
});
}
Promise 생성자 executor 함수는 동 기적으로 오류가 발생하면 암시 적으로 거부하므로 promise에 익숙한 사용자는 위의 내용을 단순화 할 수 있음을 인식 할 것입니다.
function bar() {
return new Promise((resolve) => {
if (Math.random() < 0.5) {
return resolve('return');
} else {
throw 'throw';
}
});
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다