Promise를 반환하는 비동기 함수: 자세한 설명
JavaScript에서는 비동기 함수와 Promise 간의 상호 작용을 이해하는 것이 중요합니다. JavaScript ES2017에 도입된 비동기 함수는 콜백 없이도 비동기 작업을 허용합니다. 비동기 작업의 최종 결과를 나타내는 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; }
lateTime 함수가 다른 비동기 함수에서 사용되지 않으면 혼란이 발생합니다. 비동기 컨텍스트 외부의 변수에 할당됩니다.
const time = latestTime(); // Promise { <pending> }
결과적으로 time 변수는 비동기 함수가 반환하는 기본 값입니다. 이는 비동기 함수가 본문 내에서 기본 값을 반환하더라도 항상 Promise를 반환하기 때문에 발생합니다.
이 상황을 적절하게 처리하려면 두 가지 옵션이 있습니다:
1. Promise를 직접 사용:
이벤트 핸들러나 모듈 최상위 수준과 같은 비동기식 컨텍스트에서는 Promise를 직접 처리해야 합니다. then() 메소드를 사용할 수 있습니다:
latestTime() .then(time => { console.log(time); }) .catch(error => { // Handle/report error });
2. 모듈의 최상위 Await:
최신 JavaScript 환경은 모듈의 최상위 Await를 지원하므로 다음을 작성할 수 있습니다.
const time = await latestTime();
Under the Hood:
JavaScript 엔진이 비동기 함수를 처리하는 방법을 이해하려면 재작성을 명시적 약속으로 간주하세요. 콜백:
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); }); }
이 명시적인 Promise 구문은 몇 가지 중요한 사항을 강조합니다.
위 내용은 비동기 JavaScript 함수가 기본 값을 반환할 때에도 항상 Promise를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!