簡単に書くとだいたいこういう感じになってました
const setup = async () => {
foo.on("bar", () => {
console.log(value)
})
const value = await getValue()
}
リスナの設定など外部からアクセスできる関数を設定したあとに await で待機します
await の完了より前に関数が呼び出されると value がまだ初期化されていないのでアクセスしたタイミングでエラーです
同期的だと気にしなくてよかった順番でも 非同期化すると順番を考慮しないとこういうケースがありますね
単純に value への代入を先に持ってくることもできますが イベントを逃すと困るところでは await を待たずに先にリスナを設定しておきたいケースもあります
そうなると一旦 value を先に初期化しておかないといけないのでこうなります
const setup = async () => {
let value = null
foo.on("bar", () => {
console.log(value)
})
value = await getValue()
}
再代入が必要になるので let にせざるを得ないのがいまいちです