プロミスのfs.writeFile、非同期と同期のもの 質問する

プロミスのfs.writeFile、非同期と同期のもの 質問する

コードに関して助けが必要です。私は Node.js の初心者で、多くの問題を抱えています。

私がやろうとしていること:

  1. Amazon 製品 (ASIN) を含む .txt を取得します。

  2. すべての商品を取得するアマゾン製品APIパッケージ;

  3. 各製品を .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を使うことですネイティブfsPromiseモジュールノードに含まれる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');
})();

おすすめ記事