我的应用程序向我的节点/快速服务器发出GET请求。为了检查我的服务器代码中的更改,我添加了一个setTimeout函数。我的客户端代码中的promise函数可以正常工作几分钟,但最终会停止工作并抛出错误,如果从服务器获得回报需要太长时间。有没有办法让promise函数继续运行,直到从服务器返回数据而不是立即抛出错误?基本上,我希望超时在服务器中继续运行并检查更改,我希望getMessageData()
promise函数尽可能长时间保持运行。
这是我的角度应用程序中的工厂代码,它从我在nodeJS / Express内置的远程服务器获取数据:
app.factory('getMessageData', ['$q', '$http', function($q, $http) {
var last_updated_time = 0;
return function getData() {
var deferred = $q.defer();
console.log("Time stamp is: "+last_updated_time);
var req = $http({
url: 'https://20161128t161542-dot-jarvis-hd-live-2.appspot-preview.com/read-message',
method: 'GET',
cache: false,
params: {last_updated: last_updated_time}
});
req.success(function(object) {
last_updated_time = object.time_stamp;
deferred.resolve(object);
});
req.error(function(err) {
console.log("there was an error: "+err);
deferred.reject(err);
});
return deferred.promise;
}
}]);
这是我的指令代码,它调用并启动工厂代码来发出请求:
app.directive('message', ['getMessageData', function(getMessageData) {
return {
restrict: 'E',
templateUrl: 'scripts/directives/message.html',
link: function (scope) {
function getMessage(){
getMessageData().then(function(message_data){
var message = message_data.data;
scope.message = message;
getMessage();
}, function(err){
console.log("Error: " + err);
});
}
getMessage();
}
}
}]);
这是我向/ read-message url发出GET请求的服务器代码:
app.get('/read-message', function(req,res){
var last_updated_time = req.query.last_updated;
function checkMessage() {
if(!last_updated_time || last_updated_time < new_time){
updateMessage();
}
else {
setTimeout(function(){
checkMessage();
}, 1000 * 10); //10 seconds
}
}
function updateMessage() {
var output = {
success: 1,
data: message,
time_stamp: new_time
};
return res.json(output);
}
checkMessage();
});