0

私は$intervalによって作成された約束、空想何を守る約束をキャンセルしません。別の約束($cordovaGeolocationから)私は最初の約束($rootScope.recursivePosition)を取り消すと、それはまだ4秒以上のようにしばらく働いています。この動作を制御できますか?

+0

なぜサービスで '$ rootScope'を使用していますか? – Ankh

+0

@Ankh、私のサービスは 'someService'と呼ばれています。私は' $ rootScope'を使って私の約束を追跡し、多くの場所からそれをオフにする必要があるのでサービス機能を "オン/オフ"それは2つです。 – distante

+0

コードは、 'trackMe'関数が別の時間に呼び出されたときだけ、' $ interval'を取り消します。 '$ rootScope.tracking'がfalseに設定されている場合、$ intervalを"オフ "にしてはいけません。 – georgeawg

答えて

0

約束の約束は取り消すことができません。しかし、その約束に由来する約束は取り消すことができます。

function getAllPositions(x) { 
    var defer = $q.defer(); 
    var derivedPromise = defer.promise; 

    derivedPromise.cancel = function() { 
     defer.reject('cancelled'); 
    }); 

    $cordovaGeolocation(x) 
     .then(function onSuccess(value) { 
      defer.resolve(value); 
    }).catch(function onReject(error) { 
      defer.reject(error); 
    }); 

    return derivedPromise; 
}; 

上記の例では、$cordovaGeolocation約束に由来する約束を返します。それに添付されたcancelというメソッドは、$cordovaGeolocationが解決される前に呼び出されると約束を拒否します。

$cordovaGeolocationによって開始される非同期操作を停止することはできませんが、その約束から連鎖した操作は取り消すことができます。

関連する問題