在下面的代码中,我想要实现的是每10秒进行一次return $http.get(newurl_3);
调用并刷新最后一个响应中的数据。我在不同的地方尝试过setInterval,但无法使其工作。
它实际上是一个承诺链,分为5个步骤,总共超过100行代码。不确定是否将整个事物放在setInterval中是一种很好的做法。
$http.get(url).then(function(data) {
// playing with data and returning a new promise
return $http.get(newurl_1);
}).then(function (data) {
return $http.get(newurl_2);
}).then(function (data) {
return $http.get(newurl_3);
}).then(function (data) {
return $http.get(newurl_4); // this call only needs to be refreshed.
}).then(function (data) {
// creating data array for UI.
// needs to be refreshed every 10 second to fetch updated data.
$scope.UI_presentation_Array = data...
})
答案 0 :(得分:2)
首先,考虑您的承诺链可以编写,如下所示:
var promise = $http.get(url).then(function(data) {
// playing with data and returning a new promise
return $http.get(newurl_1);
}).then(function (data) {
return $http.get(newurl_2);
});
promise.then(function (data) {
return $http.get(newurl_3); // this call only needs to be refreshed.
}).then(function (data) {
// creating data array for UI.
// needs to be refreshed every 10 second to fetch updated data.
$scope.UI_presentation_Array = data...
});
请注意,中断位于需要进行刷新的步骤之前。现在,promise
是流程的静态部分,promise.then()...
是您想要重复的部分。
现在将重复的部分包裹在function refresh() {...}
中并从refresh
致电setInterval
,完整地给出:
var promise = $http.get(url).then(function(data) {
// playing with data and returning a new promise
return $http.get(newurl_1);
}).then(function (data) {
return $http.get(newurl_2);
});
function refresh() {
return promise.then(function (data) {
return $http.get(newurl_3); // this call only needs to be refreshed.
}).then(function (data) {
// creating data array for UI.
// needs to be refreshed every 10 second to fetch updated data.
$scope.UI_presentation_Array = data...
});
}
var intervalRef = setInterval(refresh, 10000);
由于相当长的10秒间隔,这可能就足够了。除非得到非常迟缓,否则你不会遭遇“重叠” - 即在前一个完成之前开始一个获取周期。
为了完全安全起见,您应该考虑不是refresh()
来setInterval
,而是在完成上一个周期加上延迟。
答案 1 :(得分:0)
如果要求整个链条加载数据,那么您可能没有选择,每次都必须以相同的方式调用
function load() {
$http.get(url).then(function(data) {
// playing with data and returning a promise
return $http.get(newurl);
}).then(function (data) {
// creating data array for UI.
// needs to be refreshed every 10 second to fetch updated data.
$scope.UI_presentation_Array = data...
})
}
setInterval( load, 10000);