Resolva a promessa com um objeto com uma função “depois”
Isso é um pouco de uma questão abstrata, já que não tenho um caso de uso específico no momento. Eu notei que se você resolve uma promessa com uma promessa
var deferredA = $q.defer();
var deferredB = $q.defer();
deferredA.promise.then(function(result) {
// Will get here once promiseB has been resolved.
});
deferredA.resolve(deferredB.promise);
do que o promiseA não é realmente resolvido até que o promiseB tenha sido resolvido (e então o promiseA é resolvido com o valor da resolução do promiseB). No entanto, e se eu quisesse resolver com um valor de um objeto com uma função "then", como:
var deferred = $q.defer();
deferred.promise.then(function(result) {
// Aim is to get here with result = {then:function(){}},
// as though I had resolved a promise with a non-promise value,
// but this function is never called
});
deferred.resolve({
then: function() {
}
});
then promiseA nunca é realmente resolvida, pois assumiu que o valor é uma promessa, mesmo que no exemplo acima não seja, como em, não foi criado com $ q.defer (). Há um exemplo plunkr em
http://plnkr.co/edit/Z8XUKzxHtGBKBmgPed2q?p=preview
Existe uma maneira de contornar isso? Se sim, como?
Editar: esclarecido diferido / promessa e colocar no exemplo ", em seguida," retornos de chamada.