我的代码需要一些帮助.我是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(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); });