fs.writeFile dans une promesse, des éléments asynchrones synchrones
J'ai besoin d'aide avec mon code. Je suis nouveau sur nodejs et ont beaucoup de mal avec elle.
Ce que j'essaie de faire:
- 1)chercher un .txt avec les produits Amazon(ASIN)
- 2)récupérer tous les produits avec le amazon-produit-api paquet
- 3)enregistrer chaque produit dans un .fichier json
Mon code ne fonctionne pas. Je pense que j'ai foiré avec cette asynchrone-synchrone de trucs m'aider!
var amazon = require('amazon-product-api');
var fs = require('fs');
var client = amazon.createClient({
awsId: "XXX",
awsSecret: "XXX",
awsTag: "888"
});
var array = fs.readFileSync('./test.txt').toString().split('\n');
for (var i = 1; i < array.length; i++) {
var ASIN = array[i];
return client.itemLookup({
domain: 'webservices.amazon.de',
responseGroup: 'Large',
idType: 'ASIN',
itemId: ASIN
})
.then(function(results) {
fs.writeFile(ASIN + '.json', JSON.stringify(results), function(err) {
if (err) {
console.log(err);
} else {
console.log("JSON saved");
}
})
return results;
}).catch(function(err) {
console.log(err);
});
};
source d'informationauteur Markus Schmidlich
Vous devez vous connecter pour publier un commentaire.
Parce que
fs.writefile
est un traditionnel rappel asynchrone - vous besoin de suivre la promesse spec et de retourner une nouvelle promesse en l'enveloppant avec une détermination et le rejet de gestionnaire de la sorte:Donc, dans votre code, vous l'utilisez comme une sorte juste après votre appel à
.then()
dire
https://nodejs.org/api/util.html#util_util_promisify_original
c'est moins sujette aux bugs que le haut-voté réponse
Mise à jour Septembre 2017:
fs-promise
a été dépréciée en faveur defs-extra
.Je ne l'ai pas utilisé, mais vous pouvez regarder dans fs-promesse. C'est un nœud de module:
Enfin, la dernière node.js version v10.3.0 a supporté nativement fs promesses.
Vous pouvez consulter la documentation officielle pour plus de détails.
https://nodejs.org/api/fs.html#fs_fs_promises_api
Pour facile à utiliser asynchrone convertir tous rappel de la promesse utiliser une bibliothèque comme "bluebird" .
Essayez la solution avec la promesse (bluebird)