no versions found for ApplicationFrameworkReferences / Utility/messageporter_addListener / en

MessagePorter: addListener()

対象の MessagePorter にリスナーを登録します。

構文

messagePorter.addListener(listener) => function | undefined

引数

  • listener: function

    リスナーとして登録する関数です。関数は message という any 型の引数を取り、undefined , boolean , Promise<void> のいずれかを返します。

返値: function | undefined

引数 listener がリスナーとして登録されれば listener 自身、そうでなければ undefined となります。既に登録されていた場合も listener 自身となります。 listener が関数でない場合には、 listener を登録できないため undefined が返されます。

const messagePorter = new MessagePorter();
const firstAdded = (message) => {
    console.log(firstAdded.name, message);
};
const abort = (message) => {
    console.log(abort.name, message);
    return true;
};
const lastAdded = (message) => {
    console.log(lastAdded.name, message);
};

let added;
//  firstAdded を messagePorter に登録する
added = messagePorter.addListener(firstAdded);

//  登録結果の確認
console.log(added === firstAdded);
//  ==> true

//  abort を messagePorter に登録する
added = messagePorter.addListener(abort);

//  登録結果の確認
console.log(added === abort);
//  ==> true

//  lastAdded を messagePorter に登録する
added = messagePorter.addListener(lastAdded);

//  登録結果の確認
console.log(added === lastAdded);
//  ==> true

//  function でない値を渡す
added = messagePorter.addListener("not-a-function");
//  登録結果の確認
console.log(added === undefined);
//  ==> true

//  登録済みの関数を渡す
//  これは後続の post() の結果に影響しない。
// messagePorter の内部状態は変更されない)。
added = messagePorter.addListener(firstAdded);

//  登録結果の確認
console.log(added === firstAdded);
//  ==> true

//  イベントリスナーの呼び出し
//  firstAdded は、abort が true を返すため、呼び出されない
messagePorter.post({
    id: "foo",
    code: "bar",
    param: {
        param0: 1,
        param1: true,
        param2: "string"
    }
});
//  ==> "lastAdded" [object Object]
//  ==> "abort"     [object Object]

解説

対象の MessagePorter にリスナーを登録します。

登録されたリスナーは、対象の MessagePorter に対する post() の呼び出しを契機として呼び出されます。リスナーの引数 messagepost() の引数として与えられます。またリスナーの返値は同一の MessagePorter に登録されている他のリスナーの呼び出しを行うかどうかを示し、true なら後続のリスナーの呼び出しは行われません。

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

引数 listener が関数でない場合、addListener() は何も行いません。