コードに関して助けが必要です。私は Node.js の初心者で、多くの問題を抱えています。
私がやろうとしていること:
Amazon 製品 (ASIN) を含む .txt を取得します。
すべての商品を取得するアマゾン製品APIパッケージ;
各製品を .json ファイルに保存します。
コードが動作しません。非同期と同期の部分を間違えたようです。助けてください。
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];
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);
});
};
ベストアンサー1
2019年現在…
...正しい答えはasync/awaitを使うことですネイティブfs
Promiseモジュールノードに含まれるNode.js 10 または 11 (主要なクラウド プロバイダーで既にサポートされています) にアップグレードし、次の操作を実行します。
const fs = require('fs').promises;
// This must run inside a function marked `async`:
const file = await fs.readFile('filename.txt', 'utf8');
await fs.writeFile('filename.txt', 'test');
サードパーティのパッケージを使用したり、独自のラッパーを作成したりしないでください。これはもう必要ありません。
もはや実験的ではない
Node より前では11.14.0
、この機能は実験的であるという警告が表示されていましたが、問題なく動作し、将来的にはこれが主流になるでしょう。 以降11.14.0
、この機能は実験的ではなく、実稼働対応になりました。
import
の代わりにを好む場合はどうなりますかrequire
?
これも動作しますが、この機能が実験的としてマークされていない Node.js バージョンでのみ動作します。
import { promises as fs } from 'fs';
(async () => {
await fs.writeFile('./test.txt', 'test', 'utf8');
})();