1

我有一些关于EventSource. 我可以轻松获取数据,例如我可以将数据写入控制台。但是,我想从这个函数返回这个数据。它没有返回,因为有一些延迟并且它返回未定义。

function fetchData(date,lang) {
    var source = new EventSource(*URL*.php?sse=y&lang=" + lang + "&date=" + date);
    source.addEventListener('message', function (e) {
        return e;
    }, false);
}

我怎样才能做到这一点?

4

1 回答 1

0

如果它是一次性的数据请求,那么使用EventSource该工作的工具是错误的。EventSource/SSE 是在消息在服务器上可用时向客户端(您的浏览器)发送消息。数据消息将异步通过,因为没有其他意义。

可以将事件侦听器包装在您fetchData()返回的 Promise 中,并让它在每次收到消息时解析 Promise。我实际上不确定收到第二条消息时会发生什么。

如果它只是一次性请求,那么您应该改用 AJAX 请求。同样,这是异步的。有一些建议可以让它表现得好像它在这里是同步的,但是,正如他们在那里强调的那样,你真的应该尝试调整你的代码以适应它的异步特性。

于 2018-04-05T08:39:36.840 回答