비동기 함수와 약속의 관계 이해
JavaScript에서 비동기 함수는 동기식으로 나타나는 코드를 작성할 수 있도록 하여 비동기 프로그래밍을 단순화합니다. 비동기적으로 실행됩니다. 그러나 비동기 함수가 Promise와 어떻게 상호 작용하는지 이해하는 것이 중요할 수 있습니다.
문제
다음 비동기 함수를 고려하세요.
async function latestTime() { const bl = await web3.eth.getBlock('latest'); console.log(bl.timestamp); // Returns a primitive console.log(typeof bl.timestamp.then == 'function'); // Returns false - not a promise return bl.timestamp; }
최신 시간()을 호출하면 web3.eth.getBlock에서 타임스탬프의 기본 값을 받을 것으로 예상할 수 있습니다. 그러나 대신 다음과 같이 보류 중인 Promise를 받게 됩니다.
const time = latestTime(); // Promise { <pending> }
Promise가 반환되는 이유
비동기 함수는 항상 Promise를 반환합니다. 이 Promise는 함수가 비동기 작업을 완료하고 최종 값을 제공하거나 오류와 함께 거부할 때 확정됩니다. 최신 시간()의 경우, 약속은 타임스탬프 프리미티브로 처리됩니다.
Promise 처리 방법
다른 비동기 함수 외에 그런 다음 해결된 값에 액세스하거나 오류를 처리하기 위한 약속에 대한 메서드:
latestTime() .then(time => { console.log(time); }) .catch(error => { // Handle/report error });
최상위 수준 wait
최신 환경은 모듈에서 최상위 수준 wait를 지원하므로 다음과 같은 코드를 작성할 수 있습니다.
const time = await latestTime();
이 구문은 모듈 수준에서 Promise 작업을 단순화합니다. 그러나 모듈에서 처리되지 않은 Promise 거부로 인해 모듈 로드에 실패할 수 있다는 점을 기억하세요.
Promise를 사용한 비동기 함수 이해
비동기 함수가 함께 작동하는 방식을 더 잘 이해하려면 Promise를 사용하면 JavaScript 엔진이 비동기 함수를 Promise 실행기로 컴파일하는 방법을 고려하는 것이 도움이 됩니다. 함수:
function latestTime() { return new Promise((resolve, reject) => { web3.eth.getBlock('latest') .then(bl => { console.log(bl.timestamp); console.log(typeof bl.timestamp.then == 'function'); resolve(bl.timestamp); }) .catch(reject); }); }
이 표현에서:
결과적으로 비동기 함수는 호출 코드에 대한 약속을 효과적으로 반환합니다.
위 내용은 JavaScript의 비동기 함수는 어떻게 항상 Promise를 반환합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!