2016-07-07 6 views
1

Entschuldigung, ich kann den vollständigen Code hier nicht zeigen, ich kam mit dem folgenden Code-Snippet. Ich habe einen Service und Controller. Im Dienst habe ich meinem Gruppenservice ein Timeout von 2 Sekunden hinzugefügt, um das Laden des Spinner zu testen.eckige Versprechen Verzögerung funktioniert nicht wie erwartet

aber irgendwie in Controller, läuft mein Code sofort, ohne für 2 Sekunden zu warten.

I 3 Bruchstellen hat, die Reihenfolge der Ausführung i erwartet ist: 2-> 1-> 3 aber, es mit 2-> 3- endete> 1

Hier ist mein Service.

groupService.get = function() { 
    var deffered = $q.defer(); 
    deffered.promise = $getMyDataStuffPromise.then(function (data) { 
     $timeout(function() { 
      deffered.resolve(); <- break point 1 
     }, 2000); 
    }, function (error) { 
     deffered.reject(); 
     console.log('group error', error); 
    }); 

    return deffered.promise; <- break point 2 
}; 

Controller:

$q.all([ 
     PeopleSvc.get(), 
     GroupSvc.get() 
    ]).then(function(data){ 
      console.log('data returns, stop spinner'); <- break point 3 
     }); 

könnten Sie bitte lassen Sie mich wissen, was mit diesem Code falsch war? Vielen Dank!

Antwort

3

deffered.promise = ist sehr seltsam (ich weiß nicht, was ich es noch nennen soll).

Aber Sie sollten nicht einmal versuchen, die deferrred antipattern zu implementieren. $timeout gibt bereits ein Versprechen, so alles, was Sie hier tun müssen, um Kette ist sie:

groupService.get = function() { 
    return $getMyDataStuffPromise.then(function (data) { 
     return $timeout(function() { 
      return undefined; // maybe data? 
     }, 2000); 
    }); 
}; 
+0

vielen dank! – innek

1

Nun, die Antwort auf diese Frage ist: Sie deferred.promise an die falsche Sache zugewiesen haben, so dass es nicht

funktioniert

Ein neues Zusicherungsobjekt wird bereits generiert, wenn Sie aufrufen, Sie haben es auf $getMyDataStuffPromise neu zugewiesen, natürlich würde es früher auflösen. Entfernen Sie einfach die Aufgabe.

Und sicher, weg von Versprechen-Antipattern, während Sie können, wie in anderen Post vorgeschlagen.

+0

danke !. Das erklärt, warum das Versprechen zu früh zurückging. – innek

Verwandte Themen