如何编写对将定期调用它的服务的递归调用?

时间:2015-04-14 02:48:45

标签: javascript angularjs

我有这段代码:

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部分代码?

2 个答案:

答案 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);

除非有必要,否则不需要递归。