如何存储Pubnub历史记录中的数据并使其可供所有控制器使用?

时间:2016-02-15 00:01:43

标签: javascript angularjs pubnub

我正在尝试从Pubnub.history()获取历史数据,存储该数据并使用不同的控制器更新视图。

我尝试过创建服务:

(function(){
  'use strict';

  angular.module('app')
          .service('pubnubService', ['Pubnub',
          pubnubService
  ]);

  function pubnubService(Pubnub){
    var history;
    Pubnub.history({
        channel  : 'ParkFriend',
        limit    : 1,
        callback : function(historyData) {
          console.log("callback called");
          history = historyData;
        }
    });

    return {
      getHistory : function() {
        console.log("return from getHistory called");
          return history;
      }
    };
  }

})();

问题是,getHistory()会在Pubnub.history()之前返回数据。我需要确保历史数据在返回之前存储在history上。

1 个答案:

答案 0 :(得分:1)

由于Pubnub.history是异步的,因此您的getHistory函数也必须是异步函数。

尝试以下方法:

function pubnubService(Pubnub) {

    return {
        getHistory: function(cb) { // cb is a callback function

            Pubnub.history({
                channel: 'ParkFriend',
                limit: 1,
                callback: function(historyData) {
                    console.log("callback called");
                    cb(historyData);
                }
            });
        }
    };
}

要使用此服务,您不能将其用作同步函数(,如var history = Pubnub.getHistory()),您需要将函数作为参数传递以充当回调。

正确使用:

Pubnub.getHistory(function(history) { // here you have defined an anonym func as callback

    console.log(history);
});