2013-07-04 1 views
15

Ho un modello di Ember-Data. Mi piacerebbe fare un po 'di elaborazione nella promessa di .then una volta che ha caricato e quindi restituire lo stesso modello come una promessa. Questo è quello che ho adesso. Come faccio a racchiudere l'oggetto di ritorno come una promessa in modo che altre promesse possano essere concatenate?Come faccio a creare una promessa in Ember.js per un modello di dati di Ember

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

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

} 
+0

Una volta restituito un risultato che non è un altro 'promise' da qualsiasi' thenable', è considerato risolto. Quindi restituire "membro" equivale a inserirlo in un altro 'promise' e ​​chiamare manualmente' resolve'. Hai solo bisogno di un 'promise' del wrapper se il' membro' dovesse essere ottenuto da un'altra operazione asincrona. –

+0

Questo è bello sapere .. Grazie! – ianpetzer

risposta

32

In pratica è possibile creare una promessa come questa:

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

e quindi è possibile utilizzare la proprietà then a catena ulteriormente:

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

È possibile aslo dare un'occhiata a questo jsbin che mostra come potrebbero essere implementati. E anche this è molto utile.

Spero che aiuti.

+0

Questo è fantastico .. Grazie. – ianpetzer

+0

Ehi non dovresti risolvere, rifiutare di far parte di allora ?? o ho sbagliato? Intendo qual è la differenza tra risoluzione, rifiuto e successo, fallimento nella promessa (funzione (risoluzione, rifiuto) {}). Quindi (successo, failue); Presumo che una volta che la promessa ritorna vera, allora il successo viene chiamato "allora", se restituisce false, quindi viene chiamato l'errore? – wallop

+0

Impossibile utilizzare le funzioni model.get o model.set http://jsbin.com/furukuyetu/1/edit – suryakrish