如何在Pubnub中的ngHistory中实现回调?

时间:2014-08-11 10:57:51

标签: angularjs pubnub

尝试在 on 事件中检索历史记录消息时,加载时间过长。 旋转器显示并隐藏得太快。但邮件尚未加载。

我们如何计算或获取历史记录加载的确切时间?

 $scope.limit = 100
 PubNub.ngHistory( {
                        channel : $scope.channel,
                        limit   : $scope.limit
                        });

   $rootScope.$on(PubNub.ngMsgEv($scope.channel), function(ngEvent, payload) {

                **ActivityIndicator.showSpinner();**

                    $scope.$apply(function(){
                    $scope.messages.push(payload.message);
                });

                $(".messages-wrap").scrollTop($(".messages-wrap")[0].scrollHeight);
                **ActivityIndicator.hideSpinner();**

            }); 

2 个答案:

答案 0 :(得分:4)

非常感谢您尝试使用PubNub AngularJS API!我试试 提供一些帮助。两者之间有一点区别 在这种情况下,PubNub JS API和PubNub AngularJS API。

<强>背景

在幕后,PubNub JS API history()方法立即返回, 并在给定的&#34;页面&#34;时调用回调。恢复了历史。

AngularJS API在寻求简化此交互的过程中没有这样做 接受回调 - 相反,它会为每条消息调用$rootScope.$broadcast() 在返回的历史有效负载中。

在这个版本的AngularJS API中,它目前无法进入&#34;进入内部&#34; &#39; ngHistory&#39;提供回调的方法。但是,有两种解决方案 可供您使用:一个一直在那里,第二个我刚刚添加 根据您的反馈意见。

<强>解决方案

1)请参阅此处的codepen(http://codepen.io/sunnygleason/pen/afqmh)。有一个&#34;逃生舱&#34;在PubNub AngularJS API中,它允许您直接调用JS API以用于高级用例,称为jsapi。你可以致电PubNub.jsapi.history({channel:theChannel,limit:theLimit,callback:theCallback})。唯一要记住的是,这不会将消息事件触发到$ rootScope中,您需要调用$rootScope.$apply()$scope.$apply()以确保对$scope所做的任何更改回调函数中的内容会正确传播到视图中。

2)请参阅此处的codepen(http://codepen.io/sunnygleason/pen/JIsek)。如果您更喜欢基于承诺的方法,我只是在PubNub AngularJS API的版本1.2.0-beta.4中添加了ngHistoryQ()函数。这将允许您编写如下代码:

PubNub.ngHistoryQ({channel:theChannel,limit:theLimit}).then(function(payload) {
  payload[0].forEach(function(message) {
    $scope.messages.push(message);
  }
});

您可以使用&#39; bower install pubnub-angular&#39;安装最新版本的AngularJS SDK。

使用这些解决方案中的任何一种,您都应该能够显示和隐藏您的微调器 因此。唯一的区别在于#2,您将要编写如下代码:

var historyPromise = PubNub.ngHistoryQ({channel:theChannel,limit:theLimit});
showSpinner();
historyPromise.then(function(payload) {
  // process messages from payload[0] array
  hideSpinner();
});

这有帮助吗?让我知道你的想法。再次感谢您尝试这一点。

答案 1 :(得分:0)

您是否可以在历史记录调用时以编程方式打开微调器,并在回调时以编程方式禁用它?