2016-10-13 66 views
1

要嘗試運行angularjs 2秒順序地休息我1秒和下一功能延遲初始功能:鏈接angularjs休息端點訪問

setTimeout(function() { 
    $http.get("/rest1") 
    .then(function(response) { 
     $scope.val1 = response.data; 
    }); 
}, 1000) 

    setTimeout(function() { 
    $http.get("/rest2") 
    .then(function(response) { 
     $scope.val2 = response.data; 
    }); 
}, 2000) 

這種方法是有問題的,因爲它不能保證第二rest功能將運行第一次之後(儘管很可能)。

這些rest呼叫可以鏈接,以保證rest1將在rest2後執行嗎?

+1

不清楚是什麼關係。它們都覆蓋相同的範圍變量,其次似乎不依賴於來自第一個數據 – charlietfl

+0

您可以添加另一個'.then'並在其中進行第二次調用。 – tpsilva

+1

@charlietfl問題已更新,謝謝 –

回答

2

我的一個最新的教程涵蓋了這個鏈接的HTTP請求:https://tutorialedge.net/angularjs-promises-tutorial

在超時功能結束語基本上是錯誤的方式去了解它。正如你所說的那樣,這些承諾只會「極有可能」一個接一個地運行。看看這篇文章的鏈接承諾部分,你會看到如何保證順序執行!

下面是該帖子的代碼示例摘錄!

// first chop our 
$http.get('api/chop/onions') 
    .then(function success(response){ 
    // once that is done chop our carrots 
    return $http.get('api/chop/carrots'); 
    }) 
    .then(function success(response){ 
    // once the carrots are done, add both to the stew 
    return $http.get('api/add/onionsAndCarrots'); 
    }) 
    .then(function success(response){ 
    // serve our stew 
    }); 
+2

鏈接只有答案在這裏沒有什麼價值。鏈接腐爛和回答不容易在其他答案的環境中查看。提供相關代碼並僅使用鏈接作爲對問題中的內容的支持 – charlietfl

1

絕對不要在具有不可預知的時間的事物上使用計時器。

使用一個承諾鏈,例如:

$http.get("/rest1") 
    .then((rest1Data) => { 
    $scope.val1 = rest1Data.data; 
    }) 
    .then(() => { 
    return $http.get('/rest2'); 
    }). 
    .then((rest2Data) => { 
    $scope.val2 = rest2Data.data; 
    }); 
+0

應分配每個響應對象的數據屬性 – charlietfl

+0

@charlietfl相當正確,固定。 – msanford