2016-07-26 22 views
0

In der Loopback-Dokumentation, heißt es „Folgende eingebaute Modelle die Versprechen API unterstützen: Benutzer Anwendung PersistedModel“Loopback-APIs und verspricht

Also, wenn in einem Gerät zu testen, ich möchte erstellen Benutzer, dann in diesem Benutzer anmelden, dann, wie kommen die Callback-Methode funktioniert:

aUser.create({email: '[email protected]', password: 'foo'}, function() { 
       aUser.login({email: '[email protected]', password: 'foo'}, 'user', function (err, res) { 
        // stuff 
       }); 
      }); 

aber versprechen mit nicht:

var Promise = require ('bluebird'); 
aUser.create({email: '[email protected]', password: 'bar'}) 
       .then(function(err, res){ 
        aUser.login({email: '[email protected]', password: 'bar'}, 'user'); 
       }) 
       .then(function(err, res) { 
        //stuff 
       }) 
       .catch(function(err){ 
        console.error(err); 
       }); 

Ich habe auch Promise.join, Promise.mapSeries versucht.

+0

"funktioniert nicht" wie? –

Antwort

0

Zwei Fragen:

  1. Code Ihres Versprechen das gleiche wie Ihr nicht-Versprechen Code nicht tun. In deinem Nicht-Versprechen-Code tust du nicht "Zeug", bis aUser.login erfolgreich abgeschlossen wurde, aber in deinem Versprechenscode wartest du nicht darauf. Um die gleiche Sache zu tun, muss Ihre erste then Rückruf an zurückgeben das Versprechen, dass aUser.login zurückgibt. Andernfalls wird das Versprechen, das Ihr erster Aufruf an then zurückgibt, mit dem Wert undefined aufgelöst, anstatt basierend auf der Auflösung oder Ablehnung der aUser.login Versprechung abzurechnen.

  2. Die Argumente, die Sie für Ihre then Rückrufe sind deklarieren sind falsch: Die Auflösung Rückruf ein Einzel Argument erhält, die der aufgelöste Wert ist. Es ist nicht wie ein NodeJS Callback, der zwei empfängt.

So (siehe mit *** getaggt Linien):

var Promise = require ('bluebird'); 
aUser.create({email: '[email protected]', password: 'bar'}) 
    .then(function(res){              // *** 
     return aUser.login({email: '[email protected]', password: 'bar'}, 'user'); // *** 
    }) 
    .then(function(res){              // *** 
     //stuff 
    }) 
    .catch(function(err){ 
     console.error(err); 
    }); 

Randbemerkung: Wenn Sie nicht Promise in Ihrem Code verwenden, keine Notwendigkeit, es zu verlangen.

+0

Danke für die Antwort - Entschuldigung, ein paar Tippfehler im Promise-Beispiel bezüglich Argumente, aber ich schätze das Feedback – stephenwil

+0

@stephenwil: Keine Sorge. Der erste Punkt oben ist wahrscheinlich, was falsch ist. –