fs.writeFile in ein Versprechen, asynchrone-synchrone Zeug
Brauche ich etwas Hilfe mit meinem code. Ich bin neu in nodejs und haben eine Menge Probleme mit ihm.
Was ich versuche zu tun:
- 1)Holen .txt mit Amazon-Produkten(ASIN)
- 2)holt alle Produkte mit dem amazon-Produkt-api Paket
- 3)speichern Sie jedes Produkt in einem .json-Datei
Mein code nicht funktioniert. Ich denke, dass ich Durcheinander mit diesen asynchronen-synchronen Zeug - hilft mir!!!
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);
});
};
InformationsquelleAutor Markus Schmidlich | 2015-08-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil
fs.writefile
ist eine traditionelle asynchrone callback - Sie Folgen müssen, die Versprechen, spec und geben ein neues Versprechen, wickelte Sie mit einer Entschlossenheit und Ablehnung-handler wie folgt:Also in Ihrem code, den Sie verwenden es wie so Recht nach Ihrem Anruf zu
.then()
const util = require('util');
const writeFile = util.promisify(fs.writeFile);
...
return writeFile(ASIN + '.json', JSON.stringify(results));
Beginnend in Knoten v10, die Sie verwenden können
await fs.
direkt, überprüfen Sie heraus meine Antwort untenInformationsquelleAutor AntonB
sagen
https://nodejs.org/api/util.html#util_util_promisify_original
diese ist weniger anfällig für Fehler als das top-stimmten Antwort
util.promisify
wurde Hinzugefügt node.js version 8. Dachte, diese info könnte hilfreich sein für Leute, die denken, es zu nutzen.InformationsquelleAutor amara
Ab 2018...
...die richtige Antwort ist die Verwendung von async/await mit der einheimischen
fs
Modul. Upgrade auf Node.js 10 (bereits unterstützt durch die großen cloud-Anbieter) und dazu:Nicht die Verwendung von third-party-Pakete und schreiben Sie nicht Ihre eigenen Wrapper, das ist nicht mehr notwendig.
Als der Knoten
11.1.0
, erhalten Sie eine Warnung, dass dieses feature ist noch experimentell, aber es funktioniert Prima und es ist der Weg zu gehen in der Zukunft.Für Knoten 8.x verwenden Sie das mz/fs-Bibliothek für die Verwendung von fs mit async-await.
Um die Nachricht zu vermeiden:
ExperimentalWarning: The fs.promises API is experimental
, verwenden Sie einfachnode --no-warnings app.js
InformationsquelleAutor K48
Schließlich, die neueste node.js release v10.3.0 nativ unterstützt fs verspricht.
Können Sie die offizielle Dokumentation für mehr details.
https://nodejs.org/api/fs.html#fs_fs_promises_api
const fs = require('fs').promises
nicht /versprichtAktualisiert meine Antwort.
Ich bin immer ein TypeError:
Cannot read property 'writeFile' of undefined
. Möglicherweise, weil diese Methode nicht über einen Konstruktor für den Umgang mit Binär-Strings?:fsPromises.writeFile(tempFile, response.auioContent, 'binary').then(() => { console.log('Audio content written to file: ' + tempFile); return { filePath: "filePath" } })
Es erscheint
fs.writeFile(...)
gibt ein Versprechen jetzt... Kann jemand bitte bestätigen? Diethen(...)
Teil von meinem code erreicht wird.InformationsquelleAutor Lewis
Update Sept 2017:
fs-promise
verworfen wurde zugunsten vonfs-extra
.Habe ich noch nicht benutzt, aber man konnte sich in fs-Versprechen. Es ist ein node-Modul:
InformationsquelleAutor rouan
InformationsquelleAutor Saeed Zarinfam
Scheint es
fs.writeFile(...)
selbst kehrt jetzt zurück ein Versprechen.Wenn ich meinen code
fs.writeFile(tempFile, response.auioContent, 'binary')
diethen
Teil des Codes zurückgegeben wird.Ist es möglich, diese Funktion wurde Hinzugefügt, um fs?
InformationsquelleAutor Adam Hurwitz
Für leicht asynchrone konvertieren alle callback-Versprechen nutzen einige Bibliotheken wie "bluebird" .
Versuchen, die Lösung mit Versprechen (bluebird)
InformationsquelleAutor trquoccuong