2013-07-04 6 views
15

Ich habe ein Ember-Datenmodell. Ich würde gerne etwas Verarbeitung in der .then versprechen, sobald es geladen hat und dann das gleiche Modell als Versprechen zurückgeben. Das habe ich gerade jetzt. Wie verpacke ich das Rückgabeobjekt als Versprechen, damit andere Versprechen angekettet werden können?Wie erstelle ich ein Versprechen in Ember.js für ein Ember-Datenmodell

App.Member.find(1).then(function(member){ 

    //do some processing here 
    return member; // Does this need to be wrapped as a promise? 

} 
+0

Sobald Sie ein Ergebnis zurückgegeben haben, das kein anderes "Versprechen" von einem "thenable" ist, wird es als aufgelöst betrachtet. Die Rückgabe von 'member' ist also gleichbedeutend mit dem Einschließen in ein anderes' Versprechen' und das manuelle Aufrufen von 'resolve'. Sie brauchen nur ein Wrapper 'Versprechen', wenn das' member' durch eine andere asynchrone Operation erhalten werden soll. –

+0

Das ist gut zu wissen .. Danke! – ianpetzer

Antwort

32

Grundsätzlich können Sie ein Versprechen wie diese erstellen:

var promise = new Ember.RSVP.Promise(function(resolve, reject){ 
    // succeed 
    resolve(value); 
    // or reject 
    reject(error); 
}); 

und dann können Sie die then Eigenschaft zu verketten es verwenden, weiter:

promise.then(function(value) { 
    // success 
}, function(value) { 
    // failure 
}); 

Sie können einen Blick aslo haben bei Diese jsbin zeigt, wie sie implementiert werden könnten. Und this ist auch sehr hilfreich.

Ich hoffe, es hilft.

+0

Das ist großartig .. Danke. – ianpetzer

+0

Hey sollte nicht auflösen, ablehnen ein Teil von dann ?? oder habe ich es falsch verstanden. Ich meine, was ist der Unterschied zwischen lösen, ablehnen und Erfolg, Versagen in Versprechen (Funktion (auflösen, ablehnen) {}). Dann (Erfolg, Scheitern); Ich nehme an, sobald Versprechen verspricht wahr dann wird Erfolg in "dann" aufgerufen, wenn es falsch zurückgibt dann wird Fehler aufgerufen? – wallop

+0

Die Funktionen model.get oder model.set http://jsbin.com/furukuyetu/1/edit können nicht verwendet werden – suryakrish