[解決済み] コールバックが戻るのを "待つ "方法とは?
2022-06-24 16:04:58
質問
以下の例のような単純なコールバックを使用する場合。
test() {
api.on( 'someEvent', function( response ) {
return response;
});
}
この関数をasync / awaitを使用するように変更するにはどうしたらよいでしょうか? 具体的には、'someEvent' が一度だけ呼ばれることが保証されていると仮定すると、関数テストは、次のようにコールバックが実行されるまで返さない非同期関数にしたいと思います。
async test() {
return await api.on( 'someEvent' );
}
どのように解決するのですか?
async/await
は魔法ではありません。非同期関数はPromiseのアンラップを代行してくれる関数なので
api.on()
でPromiseを返さなければなりません。このようなものです。
function apiOn(event) {
return new Promise(resolve => {
api.on(event, response => resolve(response));
});
}
次に
async function test() {
return await apiOn( 'someEvent' ); // await is actually optional here
// you'd return a Promise either way.
}
しかし、それも嘘です。なぜなら、非同期関数はそれ自体もプロミスを返すので、実際には
test()
の値を実際に取得するのではなく、値のためのPromiseを取得し、それをこのように使うことができるのです。
async function whatever() {
// snip
const response = await test();
// use response here
// snip
}
関連
-
vue3レスポンシブ対応のためのsetup+ref+reactive
-
Vueの一般的な組み込みディレクティブの説明
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] forEachループでasync/awaitを使用する
-
[解決済み] コールバック内で正しい `this` にアクセスする方法
-
[解決済み] 非同期関数+await+setTimeoutの組合せ
-
[解決済み】別のウェブページにリダイレクトするにはどうすればいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
vue3レスポンシブ対応のためのsetup+ref+reactive
-
要素ツリー制御によるvueTreeテーブル
-
vueディレクティブv-bindの使用と注意点
-
[解決済み] Error : 未定義のプロパティ 'map' を読み取ることができません。
-
[解決済み】SyntaxError: JSONの位置1に予期しないトークンoがある。
-
[解決済み】Node.js Error: Cannot find module express
-
[解決済み] 期待される代入または関数呼び出し: 未使用式なし ReactJS
-
[解決済み】 Uncaught TypeError : undefined のプロパティ 'replace' を読み取れない In Grid
-
[解決済み】<select>で現在選択されている<option>をJavaScriptで取得するにはどうすればよいですか?
-
JavaScriptのStringに関する共通メソッド