MessagePorter: post()

対象の MessagePorter に登録された各リスナーに対してイベントを通知します。

構文

messagePorter.post(message) => void

引数

  • message: any

    リスナーに渡す値です。通常、 Alier.message() 関数で生成したイベントの種別やアプリの状態を表すオブジェクトを渡します。

const messagePorter = new MessagePorter();
const expectsFoo = ({ id, code, param }) => {
    console.log(expectsFoo.name, { id, code, param });
    if (id === "foo") {
        console.log(expectsFoo.name, "foo is comming! stop subsequent processes!");
        return true;
    } else {
        console.log(expectsFoo.name, "foo is not comming...");
    }
};
const expectsBar = ({ id, code, param }) => {
    console.log(expectsBar.name, { id, code, param });
    if (id === "bar") {
        console.log(expectsBar.name, "bar is comming! stop subsequent processes!");
        return true;
    } else {
        console.log(expectsBar.name, "bar is not comming...");
    }
};
const expectsNothing = (message) => {
    console.log(expectsNothing.name, "unexpected message", message);
}

//  messagePorter にリスナーを登録する
messagePorter.addListener(expectsNothing);
messagePorter.addListener(expectsFoo);
messagePorter.addListener(expectsBar);

//  id = "foo" でメッセージを送信するリスナーの呼び出し
messagePorter.post(Alier.message("foo", "code", { foo: "foo" }));
//  ==> "expectsBar" "bar is not comming..."
//  ==> "expectsFoo" "foo is comming! stop subsequent processes!"

//  id = "bar" でメッセージを送信するリスナーの呼び出し
messagePorter.post(Alier.message("bar", "code", { bar: "bar" }));
//  ==> "expectsBar" "bar is comming! stop subsequent processes!"

//  id = "baz" でメッセージを送信するリスナーの呼び出し
messagePorter.post(Alier.message("baz", "code", { baz: "baz" }));
//  ==> "expectsBar"     "bar is not comming..."
//  ==> "expectsFoo"     "foo is not comming..."
//  ==> "expectsNothing" "unexpected message"    [object Object]

解説

対象の MessagePorter に登録された各リスナーに対してイベントを通知します。

登録されたリスナーの呼び出し順序は、addListener() で登録した順序と逆順になります。例えば listener1, listener2, listener3 の順に登録した場合、post() の呼び出しに際し、listener3, listener2, listener1 の順にリスナーが呼び出されます。

各リスナーは post() の引数 message を第一引数として与えられて呼び出されます。 いずれかのリスナーが true を返した場合、後続のリスナーの呼び出しは行われません。