AngularJS在完成另一个函数后执行一个函数

时间:2017-06-04 17:32:32

标签: javascript angularjs function asynchronous promise

我执行一个顺序调用两个函数的函数,运行第二个函数应该先完成第一个函数。但这不会发生,也许是因为第一个函数是异步的。我读到我需要使用“promise”我以不同的方式尝试了它,但它不起作用。所以我在最初写的时候重写了这个函数:

function fail() { 
    // Get the snackbar DIV
    var x = document.getElementById("snackbar")

    // Add the "show" class to DIV
    x.className = "show";

    // After 3 seconds, remove the show class from DIV
    setTimeout(function(){ x.className = x.className.replace("show", "");}, 3000);   

}

function _goback(){
    $location.url('/app/dispensers');
}    

//Check if the item is still available (if nobody bought it)
function _checkavailability(response){
    if (response.data == ""){
              console.log("Accesso non autorizzato")
    }
    $scope.infoproductbyid = response.data;
    if($scope.infoproductbyid.purchaseTime == null){
        console.log("Item disponibile");
        //if the item is available, it's possible to proceeds to checkout
        $location.url('/app/notregcheckout');
    }
    else{
        console.log("Spiacente, item non più disponibile");
      //  localStorage.clear("tokenidproduct");
        //_showSB();  
        fail();
        _goback();
    }    
}               

在最后一行中,您可以看到我先调用fail()函数,然后调用_goback()函数。我希望_goback()fail()完成时启动,但fail()包含超时,我认为由于这个原因,该函数是异步的。我不明白我该怎么做

1 个答案:

答案 0 :(得分:6)

使用$timeout service创建承诺:

function fail() { 
    // Get the snackbar DIV
    var x = document.getElementById("snackbar")

    // Add the "show" class to DIV
    x.className = "show";

    // After 3 seconds, remove the show class from DIV
    var promise = $timeout(function() {
      x.className = x.className.replace("show", "");
    }, 3000);

    //RETURN promise   
    return promise;
}

然后使用.then方法等待:

fail().then(function() {
    _goback();
});