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 与 DOM 事件侦听器的port.on概念几乎相同。您不能简单地从侦听器函数返回某些内容并期望它传播到外部函数。甚至不能保证您的侦听器函数将被同步调用。您当前的功能相当于:

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);
}

PS:我刚刚注意到你的on函数有一个名为 的参数test,但函数体使用了 undefined testText。这也是一个问题,但是一个不相关的问题,并且可能仅在您简化真实代码以适应此处的问题时才引入。

于 2013-09-26T13:39:29.767 回答