>  Q&A  >  본문

비동기 함수는 값이 아닌 약속을 반환합니다.

Promise에서 async/await가 어떻게 작동하는지 이해하려고 노력 중입니다.

으아악

내가 이해한 바에 따르면, Wait는 차단되어야 하는데 위 코드에서는 기본 요소의 사용을 차단하는 것 같습니다 timestamp 返回对象 bl . 그런 다음 내 함수는 원래 값을 반환하지만 시간 변수는 원래 값 대신 보류 중인 약속으로 설정됩니다. 내가 놓친 게 무엇입니까?

P粉464208937P粉464208937390일 전523

모든 응답(2)나는 대답할 것이다

  • P粉099985373

    P粉0999853732023-10-20 14:57:49

    비동기 접두사는 약속의 래퍼입니다.

    으아악

    과 동일 으아악

    회신하다
    0
  • P粉002023326

    P粉0020233262023-10-20 12:58:06

    async 函数始终返回一个 Promise。这就是它报告异步工作完成情况的方式。如果您在另一个async函数中使用它,则可以使用await来等待其promise解决,但在非async 함수(일반적으로 최상위 수준 또는 이벤트 핸들러)에서는 Promise를 직접 사용해야 합니다. 예:

    으아악

    ...그러나 JavaScript 모듈의 최상위 수준에서 이 작업을 수행하면 이제 모든 최신 환경에서 최상위 모듈 await을 지원합니다.

    으아악

    (이 Promise가 거부되면 모듈이 로드되지 않습니다. Promise가 실패하더라도 모듈이 의미 있게 작동하는 경우 Promise 거부를 처리하기 위해 try/catch 中로 래핑해야 합니다.)


    그것은 명시적인 Promise 콜백 용어의 형태로 무언가를 공개할 수도 있고 공개하지 않을 수도 있으며, 이는 JavaScript 엔진이 내부적으로 async 함수를 처리하는 방법에 대한 아이디어를 제공합니다.

    으아악

    몇 가지 중요한 참고 사항:

    • 이를 new Promise 的函数(promise 执行器函数)由 new Promise 동기 호출에 전달합니다.
      • 이것이 작업이 시작되는 이유이며, 작업을 시작하기 위한 동기 호출 web3.eth.getBlock입니다.
    • Promise 실행자에서 발생하는 모든 오류(등)는 new Promise 포착되어 Promise 거부로 변환됩니다.
    • Promise 콜백에서 발생하는 모든 오류(예: 전달하는 then 오류)가 포착되어 거부로 변환됩니다.

    회신하다
    0
  • 취소회신하다