我需要一些代码方面的帮助。我是Node.js的新手,对它有很多麻烦。
我想要做的是:
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);
});
};发布于 2018-08-30 17:56:03
截至2019年...
...the正确答案是将异步/等待与节点中包含的 一起使用。升级到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');
})();发布于 2016-02-05 04:38:24
因为fs.writefile是一个传统的异步回调--你需要遵循promise规范并返回一个新的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', JSON.stringify(results), 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);
});发布于 2017-11-18 08:35:12
说
const util = require('util')
const fs_writeFile = util.promisify(fs.writeFile)https://nodejs.org/api/util.html#util_util_promisify_original
这比投票最多的答案更不容易出现错误。
https://stackoverflow.com/questions/31978347
复制相似问题