2020年4月19日日曜日

ブラウザ拡張機能のruntime.onMessage()

現在、とあるブラウザ拡張機能を作成中です。

コンテンツ⇄バックグラウンド間の通信のためにruntime.onMessageを調べていたら、気になる記述を見つけました。

どの部分?

ここ。
この記事を執筆時点でのスクリーンショット です。

後者のコードがシンタックスエラーになるというのは置いといて、パッと見た時に「async関数とPromiseを返す関数だと何か挙動が違うの?」と混乱しました。実態は同じはずなのに、と。

これは言葉足らずというか、明記されていないけどリスナー関数がPromiseを返すとそれ以降のリスナーは呼び出されないという仕様があるんだと推測。

つまり、前者のコードは常にPromiseを返すので他のリスナー関数は呼び出されないんではないかと。
そして後者のコードは処理しない場合は何も返さない(undefinedを返す)ので、data.typehandle_me以外の場合は後続のリスナー関数が呼ばれるんではないかと。

ちょっと日本語訳が分かりにくかった(原文の直訳)ので、上記の推測が正しいのを確認したらそのうち修正しておきます。

どんな拡張機能作ってるの?

それは言えません。
クッソ個人的なものなので、多分誰の役にも立ちません。

0 件のコメント:

コメントを投稿