2016-10-21 1 views
0

J'ai une promesse de chaîne et je veux retourner un objet au lieu d'une promesse. Au lieu de cela, j'ai une promesse. Ce est la fonction:angularjs: la promesse de la chaîne renvoie une promesse au lieu d'un objet

self.get = function(id) { 
    var parameters = [id]; 
    var orders  = {} 
    return DBA.queryAgent("SELECT * FROM Orders WHERE " + column_id + " = ?", parameters).then(function(result) { 
     return DBA.getById(result); 
    }).then(function(result) { 
     order = result; 
     return self.getProdutcs(id); 
    }).then(function(result) { 
     order.Products = result; 
     return order; 
    }); 
} 

Je pense que

service.get(1) 

retourne un objet, je reçois une promesse. Où ai-je tort?

Merci

Répondre

2

De la documentation angulaire https://docs.angularjs.org/api/ng/service/ $ q

appelant la méthode then d'une promesse renvoie une nouvelle promesse dérivée,

C'est la façon dont est écrit l'angle. Par conséquent, vous devez y accéder comme ça.

service.get.then(function(result) { 
    // whatever 
    }); 
+0

Je l'ai eu, merci. J'avais oublié le fait asynchrone. –

1

Vous pouvez accéder à la valeur en procédant comme suit:

service.get.then(function(result) { 
    console.log(result); 
    }); 
+0

Je sais que je peux le faire, mais je veux comprendre comment je ne peux pas faire cela. –

+0

La fonction 'then()' renvoie une promesse. C'est comme ça qu'ils travaillent. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then –

+0

Si vous ne voulez pas qu'il renvoie une promesse, alors vous pouvez exécuter exécuter la commande de manière synchrone et bloquer le thread ou passez une fonction de rappel à la méthode get et invoquez-la au lieu d'utiliser une fonction anonyme. Le point des promesses est de ne faire aucune de ces choses – charliebeckwith