微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐