2015-11-19 1 views
0

Je voudrais appeler plusieurs fois la même API mais avec des clés différentes pour obtenir des résultats plus rapidement.Appels d'API simultanés avec rappels indépendants

La chose est que je dois pas attendre pour recevoir le résultat du premier appel à lancer le deuxième appel, etc ...

Les étapes sont les suivantes:

1) J'ai un tableau avec tous les les différentes clés.

2) Cette obtient des données de l'API (« APIKeys » est le tableau qui contient toutes les clés):

_.map(APIKeys,function(value, index){ 
    var newCount = count+(25*index); 
    parseResult(Meteor.http.get("http://my.api.com/content/search/scidir?query=a&count=25&start="+newCount+"&apiKey="+value+"")); 
}); 

3) J'appelle une fonction (appelée « parseResult ») qui forme et filtre le résultat que je reçois de l'API et l'enregistre dans la base de données.

Je veux appeler la fonction (étape 3) sans avoir à attendre que j'obtienne les données de l'API et continuer avec les autres touches pendant que la demande est faite. Savez-vous comment je pourrais faire ça avec météore?

Merci

Répondre

1

quelque chose comme ça à utiliser HTTP.get() de manière async:

HTTP.get("http://my.api.com/content/search/scidir?query=a&count=25&start="+newCount+"&apiKey="+value+"", function (error, result) { 
    // parse the result here 
}); 

Et voir les docs ici: http://docs.meteor.com/#/full/http_get

+0

Je l'ai déjà essayé, mais le problème est que je vouloir lancer toutes les demandes en même temps et les laisser s'exécuter jusqu'à ce qu'elles aient les données et les stockent dans la base de données. J'ai trouvé une solution en utilisant Fiber et Future, cela semble fonctionner mais je ne suis pas encore sûr. – Leon

+0

Je ne comprends pas pourquoi ce que j'ai écrit n'est pas une bonne solution mais ok si vous avez trouvé un moyen de le faire déjà –

+0

Vous êtes la solution est correcte mais ce n'est pas vraiment ce que je cherche. J'ai besoin de faire ce que tu as écrit mais 1000x en même temps. Je dois donc trouver une solution pour ne pas avoir à attendre le premier appel de l'API pour terminer le second appel, etc ... et comme l'API est lente, je dois attendre les données avant de les stocker dans la base de données. C'est assez difficile à expliquer mais en général je dois juste gérer la boucle événementielle avec Future et Fiber, ça fonctionne comme du charme maintenant :) – Leon