如何在.then中使用函数变量?

时间:2015-04-14 04:10:41

标签: angularjs typescript

我编码了这个:

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

我想用这样的函数简化它:

function connectMessage(msg) {
    er.msg = msg;
}

  us.isConnected().then(connectMessage(msg), connectMessage(msg));
    $interval(function () {
       us.isConnected().then(connectMessage(msg), connectMessage(msg));
    }, 20 * 1000);

然而,这给了我一个错误:

错误2提供的参数与调用目标的任何签名都不匹配:     无法应用类型'(promiseValue:any)=> ng.IHttpPromise< {}>'参数1是类型' void'。

有人可以就此提出建议吗?

2 个答案:

答案 0 :(得分:4)

你可以做的是

function connectMessage(msg) {
    er.msg = msg;
}

var connect = function () {
   us.isConnected().then(connectMessage, connectMessage);
}

connect();

var interval = $interval(connect, 20 * 1000);

$scope.on('$destroy', function() {
        $interval.cancel(interval);
});

要注意三点

  1. 创建函数以避免重复connectMessage

  2. 创建函数以避免重复us.isConnected()

  3. 取消$ destroy的间隔,非常重要的部分

答案 1 :(得分:1)

  

错误2提供的参数与呼叫目标的任何签名都不匹配:无法应用类型'(promiseValue:any)=> ng.IHttpPromise< {}>'参数1是类型' void'。

then的第一个参数需要是函数所以connectMessage而不是你调用函数connectMessage(er.msg) < / p>

  

我想简化它

us.isConnected().then(connectMessage(er.msg), function () { er.msg = "Cannot connect" });如何比us.isConnected().then(null, function () { er.msg = "Cannot connect" });更简单但这是一个单独的讨论:)

基于更新

不要自己调用此函数,即connectMessage而不是connectMessage(msg)

function connectMessage(msg) {
    er.msg = msg;
}

us.isConnected().then(connectMessage, connectMessage);
  $interval(function () {
     us.isConnected().then(connectMessage, connectMessage);
}, 20 * 1000);