Quindi ho un metodo Meteor che dovrebbe dire al server di inviare più richieste API a API di terze parti e quindi combinare i risultati di queste query in un array, che viene restituito al client.meteora - Sincronizzare più query asincrone prima di tornare?
Tuttavia, non riesco a trovare un modo per il server di attendere il completamento di tutte le query dell'API prima di restituire il risultato.
La versione sincrona del codice, che ha appena recupera la chiamata dati API dopo l'altro, va così:
Meteor.methods({
fetchData: function(APILinks) {
var data = [];
APILinks.forEach(function(APILink) {
var items = HTTP.get(APILink).content.items;
items.forEach(function (item) {
data.push(item);
});
});
return items;
}
});
Questo codice sincrono funziona. Tuttavia, non sono stato in grado di trovare un buon modo per rendere le richieste API asincrone. Il più vicino possibile a una soluzione era ridefinire il metodo per restituire il risultato di una sola richiesta API e quindi fare in modo che il client effettuasse il ciclo attraverso ciascun link dell'API e chiamasse il metodo per ognuno di essi. Tuttavia, c'è un modo per racchiudere tutte queste richieste in un unico metodo che restituisce solo quando tutte le richieste API sono complete?
Meteor ha una fresca astrazione dei futures: Meteor._wrapAsync, evviva per evitare Lo standard –
'Meteor.wrapAsync' è utile quando si desidera trasformare task asincroni in chiamate sincrone procedurali successive, ma non sarà di aiuto qui perché ciò che vogliamo ottenere è l'avvio simultaneo di più task asincroni che vogliamo eseguire in parallelo. Inoltre, non sarebbe inutile utilizzare 'Meteor.wrapAsync' per racchiudere' HTTP.get' perché sta già esponendo una versione sincrona disponibile quando non si inoltra alcun callback come argomento. – saimeunt