Je lis le fichier JSON en utilisant fs.readFileSync et pour chaque document obtenu, je fais un appel d'API de repos en utilisant le client .poster. Une fois que j'obtiens une réponse, je veux placer le contenu reçu dans un autre fichier JSON qui est une réplique de l'entrée JSON à l'exception de l'élément supplémentaire qui est la donnée reçue de l'appel client.post. Cependant probablement en raison de la nature asynchrone de client.post, je suis incapable d'ajouter l'élément à la sortie JSON. Je suis nouveau à NodeJS. Pouvez-vous s'il vous plaît m'aider là où je suis manquant. Ci-dessous le code et les donnéesNodeJS Lire le fichier, faire l'appel node-rest-client pour obtenir des données connexes et ajouter la réponse récupérée comme élément dans JSON
données:
[
{
"ticker": "CLYD"
},
{
"ticker": "EGH"
}
]
code:
var fs = require('fs');
var Client = require('node-rest-client').Client;
var data = fs.readFileSync(__dirname + "/data/stocks.json", "utf8");
processData(data);
function processData (data) {
var obj = JSON.parse(data);
for (j = 0; j < obj.length; j++) {
obj[j].stockInformation = getValuesForTicker (obj[j].ticker.trim());
}
var jsonOutput = JSON.stringify(obj,null,'\t');
fs.writeFileSync(__dirname + "/data/response.json", jsonOutput);
};
function getValuesForTicker (ticker) {
/**
* More details and samples at https://www.npmjs.com/package/node-rest-client
*/
var client = new Client();
var values;
// set content-type header and data as json in args parameter
var args = {
data: { "ticker" : ticker},
headers: { "Content-Type": "application/json", "Accept" : "application/json" }
};
var responseToRequest = client.post("https://url.providing.response.as.json.content/", args, function (data, response) {
// parsed response body as js object
values = JSON.parse(JSON.stringify(data)).price;
});
return values;
};
Merci Minkesh. J'ai essayé le code que vous avez donné mais je n'ai pas pu utiliser la partie 'obj [j] .stockInformation = val' du code. Je pense que pour un appel asynchrone, obj [j] sort du cadre. J'essaie de trouver un moyen de définir des valeurs de retour à obj [j] – user1998463
En fait, la boucle for n'attend pas la promesse de résoudre (ou dans un autre mot, appel asynchrone à terminer). Vous pouvez utiliser la bibliothèque 'async' pour obtenir les résultats souhaités. https://github.com/caolan/async. Plus précisément, vous devrez utiliser la méthode 'async.each'. Vous pouvez également y parvenir en utilisant 'Promise.all'. –