k42un0k0
@k42un0k0 (k42un0k0)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

BunでJSを実行したら「await await」の時だけうまくいくのはどうしてですか?

解決したいこと

inquirerをBunの実行環境の無限ループ中で実行したら2回目のループでエラーをはかずにExit Codeは130でプロセスが落ちました。
awaitを2回重ねることで解決はしたのですが、なぜ2回awaitを重ねると動くのかわからなかったのでどういう理屈なのか教えてほしいです。

version

Bun: 1.0.4
inquirer: 9.2.11

2回目以降ループしないコード

import inquirer from "inquirer";

async function prompt() {
  while (true) {
    const answers = await inquirer.prompt([{
      name:"hello",
      type:"input",
      messege:"hello world",
    }])
    console.log(answers)
  }
}

void prompt()

2回目以降もループするようになったソースコード

import inquirer from "inquirer";

async function prompt() {
  while (true) {
    const answers = await await inquirer.prompt([{
      name:"hello",
      type:"input",
      messege:"hello world",
    }])
    console.log(answers)
  }
}

void prompt()

試したこと

ts-nodeで実行したりしたらawaitを重ねなくても無限ループしました。
型注釈がなかったので、ファイルを.jsに変えても実行しましたが同様にループしました。

0

2Answer

awaitでは動かないですが、await awaitで動くのはおかしいです。
コードをテストやってみましたが、Bunが持っているバグの可能性があります。

それで、Bunのgithubにissueを作って置きました。
issueの担当者まで決められましたので、すぐ答えが来ると思います。

2Like

Comments

  1. @k42un0k0

    Questioner

    ありがとうございます。
    issueの返答を待ちたいと思います。

参考サンプルが悪いのでは?

対話型の同期関数に非同期async、同期制御await指定していると、prompt関数としては対話しずらいのでは?

なぜ2回awaitを重ねると動くのかわからなかったのでどういう理屈

1回目のawaitはwhileの同期制御として働き、2回目のawaitがinquirer.promptの同期制御として働いたのではと推測します。

0Like

Your answer might help someone💌