node.js – fs.writeFile在promise,异步同步的东西中

我的代码需要一些帮助.我是nodejs的新手,并且遇到很多麻烦.
我想做什么:

> 1)使用亚马逊产品(ASIN)获取.txt
> 2)使用amazon-product-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];

    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);
        });
};

解决方法

因为fs.writefile是一个传统的异步回调 – 你需要遵循promise规范并返回一个新的声明,用一个解析和拒绝处理程序包装它,如下所示:

return new Promise(function(resolve,reject) {
    fs.writeFile("<filename.type>",data,'<file-encoding>',function(err) {
        if (err) reject(err);
        else resolve(data);
    });
});

因此,在您的代码中,您可以在调用.then()后立即使用它

.then(function(results) {
    return new Promise(function(resolve,reject) {
            fs.writeFile(ASIN + '.json',function(err) {
               if (err) reject(err);
               else resolve(data);
            });
    });
  }).then(function(results) {
       console.log("results here: " + results)
  }).catch(function(err) {
       console.log("error here: " + err);
  });

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...