我有这段代码:
us.isConnected()
.then(function (msg) { er.msg = msg }, function (msg) { er.msg = msg });
$interval(function () {
us.isConnected()
.then(function (msg) { er.msg = msg }, function (msg) { er.msg = msg });
}, 20 * 1000);
检查连接,然后输出消息。
有没有办法可以简化这段代码并使其递归,所以我不必多次编写.then部分代码?
答案 0 :(得分:3)
您可以使用$timeout
而不是依赖可能执行多次$intervals
次请求的isConnected()
,而无需等待之前执行的请求完成。
var promise;
// execute testConnection()
testConnection();
function testConnection() {
// run request initially
return request().finally(function() {
// runs the request recursively
// and assign the timeout's promise
// if you need to cancel the recursion
return (promise = $timeout(request, 20 * 1000));
});
}
// request if ui is connected
function request() {
return ui.isConnected()
.then(setErr, setErr);
}
// ser `er` object
function serErr(msg) {
er.msg = msg;
}
// cancels the recursive timeout
function cancel() {
$timeout.cancel(promise);
}
答案 1 :(得分:1)
var isConnected;
(isConnected = function () {
us.isConnected()
.then(function (msg) { er.msg = msg }, function (msg) { er.msg = msg });
})();
$interval(isConnected, 20 * 1000);
除非有必要,否则不需要递归。