Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从API获取数据时同步实时更新_Javascript_Angularjs - Fatal编程技术网

Javascript 从API获取数据时同步实时更新

Javascript 从API获取数据时同步实时更新,javascript,angularjs,Javascript,Angularjs,我正在开发的fire data应用程序每秒都会更新一次,我之前所做的一切都很好,但现在我遇到了一个问题 基本上,当我完成从API获取整个数据时,我就开始监听SSE服务器发送的事件,这会导致我刚获取的数据与get运行时接收到的更新之间的不同步 ajax调用开始时的持续时间大约为20到30秒,在这段时间内,我错过了一些更新 如果我一加载应用程序就开始监听SSE,那么问题是如果我收到更新,但我的集合中仍然没有该对象,那么无论如何更新都会丢失 我在整个应用程序中使用Angular,代码一开始看起来非常类

我正在开发的fire data应用程序每秒都会更新一次,我之前所做的一切都很好,但现在我遇到了一个问题

基本上,当我完成从API获取整个数据时,我就开始监听SSE服务器发送的事件,这会导致我刚获取的数据与get运行时接收到的更新之间的不同步

ajax调用开始时的持续时间大约为20到30秒,在这段时间内,我错过了一些更新

如果我一加载应用程序就开始监听SSE,那么问题是如果我收到更新,但我的集合中仍然没有该对象,那么无论如何更新都会丢失

我在整个应用程序中使用Angular,代码一开始看起来非常类似:

var source = new EventSource('/updates');
$scope.items_01 = [];
$scope.items_02 = [];

$q.all([
    getList(first, [], 0),
    getList(second, [], 0)
])
.then(function (data) {
    $scope.items_01 = data[0];
    $scope.items_02 = data[1];
    startStreaming();
});

function startStreaming() {
    source.addEventListener('items_01', handleItems01Callback, false);
    source.addEventListener('items_02', handleItems02Callback, false);
}

我如何使我得到的数据与我得到的更新保持同步,有什么想法吗?

立即开始收听SSE并缓冲传入的更新。获得完整快照后,开始应用更新


我想到的潜在问题是,某些更新可能已经应用于快照。您需要一些额外的信息来了解这一点,这样您就可以跳过这些更新。

我按照您的建议进行了操作,看起来效果不错。谢谢