2

ワーカーからデータを返す関数を作成しようとしていますが、うまくいかないようです。どうすればよいですか?

function getExample()
{
    worker = tabs.activeTab.attach({contentScript:
        "var testText = document.getElementsByClassName('exampleElement')[0].children[1].innerHTML;" +
        "self.port.emit('test', testText);"
    });
    worker.port.on('test', function(test) {return testText;});
}
4

1 に答える 1

2

API は、port.onDOM イベント リスナーとほとんど同じ概念です。リスナー関数から単純に何かを返し、それが外部関数に伝播することを期待することはできません。リスナー関数が同期的に呼び出されることさえ保証されていません。現在の関数は次と同等です。

function getExample() {
    worker.port.on('test', function(testText) {return testText;});
    return undefined;
}

コールバック関数を提供し、コードが非同期であると想定する必要があります。

function getExample(callback) {
    /* ... */
    worker.port.on('test', function(testText) { callback(testText); });
    // or shorter:
    worker.port.on('test', callback);
}

onPS:関数に という名前のパラメーターがあることに気付きましtestたが、関数本体は undefined を使用していtestTextます。これも問題ですが、無関係なものであり、ここでの質問に収まるように実際のコードを単純化したときにのみ導入される可能性があります。

于 2013-09-26T13:39:29.767 に答える