gpt4 book ai didi

javascript - 使用 Websockets 的 Angularjs Phonegap Android

转载 作者:太空宇宙 更新时间:2023-11-03 10:23:45 28 4
gpt4 key购买 nike

我什至不知道如何直接解释这一点,但我会尝试。

简介

我正在使用 angularjs 构建一个 Phonegap 应用程序,我正在尝试拼接 WebSocket 消息以更新我的 UI。我曾经拥有定期与服务器通信并相应地更改其数据的服务,并且运行良好。一个例子:

Service1.js:

     var applyUpdate = function (
angular.extend(instance, data);
if (!$rootScope.$$phase) $rootScope.$apply();
};

this.update = function () {
DataProvider.get('getThermostatSettings', {}, applyUpdate, function(){}, true);
}

所以基本上我只是每 5 秒调用一次“更新”函数,从服务器接收数据并更新此服务。然后, Controller 只需访问该服务,一切正常。

问题

现在的问题是,我缝合了一个用 java 编写的 WebSocket 接口(interface),它为我处理所有的 websocket 实现。我把它取自:https://github.com/ziadloo/PhoneGap-Java-WebSocket .它基本上注册了一个可从 Javascript 访问的 Javascript 接口(interface),以与 java 进行通信。

每次我现在有变化,我只是通过 WebSocket 从服务器推送一个字符串,说它应该更新,然后我从我的 javascript 中的服务调用“更新”函数,而不是定期查询数据,这太愚蠢了。

WebSocket 运行良好。我可以看到消息到来,我调用更新,它从服务器正确获取所有内容,“更新”函数调用,然后使用正确的值调用“applyUpdate”等等,甚至调用“$rootScope.$apply”。

但是 Angular 服务中的所有更新数据都不可见!似乎所有这些更改都在不同的线程中运行!?!?。我知道 javascript 是单线程的,但看起来确实如此。

让我换一种更好的方式:我的印象是,只要 WebView 调用 javascript 回调函数,我就会有一个不同的 javascript“线程”在运行,并且无法访问它之外的任何东西

更多信息

我写了一个函数,它只是每5 秒 输出一个数字。 websocket 更新这个数字。我的输出如下:

N: 1
N: 1

然后在 WebSocket 推送带有新数字 (2) 的数据后,我得到两个打印:

N: 1
N: 2

N: 1
N: 2

N: 1
N: 2

有人对此有任何指示吗?有人试过做类似的事情吗?我不是 Angular 专业人士,但似乎一旦我从 Java 接口(interface)收到回调,一切都会变得一团糟。

我已经看过:Angularjs model changes after websocket data push from server我的代码看起来非常相似。我认为唯一的问题是来自 Java 的回调。

谢谢

更新:这是 AngularJS 的问题。如果我在一个窗口全局变量中设置这个变量,一切都会正常分配。 Angular 是否有可能以某种方式创建两个不同的 $scope?

更新[2]:更清楚一点:在浏览器中,一切都按预期工作。只有当我在模拟器中运行它时,它才会变得一团糟。

最佳答案

Angular.js 完全有可能创建两个 $scope。调试就看this screencast .

可能对show all the $scopes on the page有帮助.

您还应该知道 websockets on mobile aren't the best idea .根据该谈话(由具有 websockets 专业知识的 Nodejitsu 员工提供),崩溃和失败似乎很有可能发生。

关于javascript - 使用 Websockets 的 Angularjs Phonegap Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15575798/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com