我正在尝试从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
上。
答案 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);
});