> 웹 프론트엔드 > JS 튜토리얼 > JavaScript에서 최상위 Async/Await가 작동하지 않는 이유는 무엇이며 어떻게 해결할 수 있습니까?

JavaScript에서 최상위 Async/Await가 작동하지 않는 이유는 무엇이며 어떻게 해결할 수 있습니까?

DDD
풀어 주다: 2024-12-07 10:05:17
원래의
745명이 탐색했습니다.

Why Doesn't Top-Level Async/Await Work in JavaScript and How Can I Fix It?

최상위 수준에서 async/await 사용

질문:

다음이 수행되는 이유는 무엇입니까? 코드가 아니다 일합니까?

async function main() {  
    var value = await Promise.resolve('Hey there');
    console.log('inside: ' + value);
    return value;
}

var text = main();  
console.log('outside: ' + text);
로그인 후 복사

답변:

코드가 작동하지 않는 이유는 main이 Promise를 반환하기 때문입니다. 모든 비동기 함수는 Promise를 반환합니다.

최상위 수준에서 async/await를 사용하려면 세 가지 옵션이 있습니다:

1. 모듈의 최상위 대기:

ES2022에서는 모듈에서 최상위 대기를 사용할 수 있습니다. 이를 통해 모듈 상단에서 wait 구문을 사용할 수 있습니다. 그러나 모듈은 여러분이 기다리는 약속이 확정될 때까지 로딩을 완료하지 않습니다. Promise가 거부되면 모듈이 로드되지 않습니다.

const text = await main();
console.log(text);
로그인 후 복사

2. 절대 거부하지 않는 최상위 비동기 기능:

절대 거부하지 않는 최상위 비동기 기능 사용("처리되지 않은 거부" 오류를 원하지 않는 한):

(async () => {
    try {
        const text = await main();
        console.log(text);
    } catch (e) {
        // Handle errors
    }
})();
로그인 후 복사

3. then and catch:

main에서 반환된 promise를 처리하려면 .then() 및 .catch()를 사용하세요.

main()
    .then(text => {
        console.log(text);
    })
    .catch(err => {
        // Handle errors
    });
로그인 후 복사

세 가지 옵션 모두 promise 거부 또는 처리가 필요하다는 점에 유의하세요. 비동기 예외를 전달할 호출자가 없기 때문입니다.

위 내용은 JavaScript에서 최상위 Async/Await가 작동하지 않는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿