2016-10-13 4 views
1

Um zu versuchen, der Reihe nach laufen AngularJS ruhen I ursprüngliche Funktion von 1 Sekunde und nächste Funktion um 2 Sekunden Verzögerung:Chaining AngularJS ruhen Endpunkt Zugang

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) 

Dieser Ansatz ist problematisch, da es nicht die zweite rest Funktion garantiert wird läuft nach dem ersten (obwohl es sehr wahrscheinlich ist).

Können diese rest Anrufe verkettet werden, so dass es garantiert rest1 wird nach rest2 ausgeführt wird?

+1

nicht klar, welche Beziehung ist. Beide überschreiben die selbe Scope-Variable und die zweite scheint nicht von den Daten der ersten – charlietfl

+0

abhängig zu sein. Sie könnten einfach eine weitere '.then' hinzufügen und den zweiten Aufruf darin machen. – tpsilva

+1

@charlietfl Frage aktualisiert, danke –

Antwort

2

Einer meiner neuesten Tutorials umfasst diese Verkettung von HTTP-Anfragen: https://tutorialedge.net/angularjs-promises-tutorial

es in einer Timeout-Funktion Verpackung ist im Grunde der falsche Weg, um darüber zu gehen. Wie Sie sagten, ist es nur 'sehr wahrscheinlich', dass diese Versprechen nacheinander stattfinden werden. Werfen Sie einen Blick auf den Abschnitt mit den Verkettungsversprechen dieses Beitrags und Sie werden sehen, wie Sie die sequenzielle Ausführung gewährleisten können!

Unten ist der Code-Beispiel-Auszug aus diesem Beitrag!

// 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

Link nur Antworten haben hier sehr wenig Wert. Links rot und Antwort ist nicht einfach im Zusammenhang mit anderen Antworten zu überprüfen. Stellen Sie relevanten Code zur Verfügung und verwenden Sie nur Link als Unterstützung für das, was in der Frage – charlietfl

1

Verwenden Sie Timer auf etwas mit unvorhersehbarem Timing definitiv nicht.

ein Versprechen Kette, beispielsweise Verwendung:

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

sollte Daten Eigenschaft jedes Antwortobjekts zuweisen – charlietfl

+0

@charlietfl Ganz richtig, behoben. – msanford