Promise - JavaScript | MDN

How do Promises Work? - Quil’s Fluffy World

2019/6にPromise - JavaScript | MDNに対して

  • 「resolveが非同期的に呼ばれる」という言葉は曖昧だ と書いたが、今見たらその表現が見つけられなかった。 2021/2現在、もっと明確に書かれている。

  • プロミスは非同期であることが保証されていることに注意してください。したがって、既に「解決済み」のプロミスに対するアクションは、スタックがクリアされ、クロックティックが経過した後にのみ実行されます。この効果は setTimeout(action,10) とよく似ています ---old 「resolveが非同期的に呼ばれる」という言葉は曖昧だ

  • Promiseの第一引数である(resolve, reject) => {…}の中でresolveを同期的に呼ぼうが非同期的に呼ぼうが、thenの第一引数に渡された関数は非同期的に呼ばれる

:

create promise start
promise body start
sync body start
sync body end
promise body end
create promise end
specify promise.then start
specify promise.then end
resolved ok

ts

  const syncBody = (resolve: any, reject: any) => {
    console.log("sync body start")
    resolve("ok")
    console.log("sync body end")
  }
  const asyncBody = (resolve: any, reject: any) => {
    console.log("async body start")
    setTimeout(() => {
      console.log("timeout start")
      resolve("ok")
      console.log("timeout end")
    }, 1000)
    console.log("async body end")
  }
 
  console.log("create promise start")
  let p = new Promise((resolve, reject) => {
    console.log("promise body start")
    syncBody(resolve, reject)
    console.log("promise body end")
  })
  console.log("create promise end")
 
  console.log("specify promise.then start")
  p.then((x) => {
    console.log("resolved", x)
  })
  console.log("specify promise.then end")