【发布时间】:2020-01-17 15:40:35
【问题描述】:
我需要一些关于我正在编写的助手的帮助。出于某种原因,在 readFile 的异步中使用归约,当尝试将结果写入文件时,它不会前进到数组的下一项。但是,如果我使用 console.log,它就可以正常工作。
const neatCsv = require('neat-csv');
const fetch = require('node-fetch');
const fs = require('fs');
fs.readFile('./codes.csv', async (err, data) => {
if (err) { throw err; }
let baseUrl = 'https://hostname/orders?from=2019-10-21T00:00:00.001Z&to=2019-12-31T23:59:59.000Z&promo=';
const starterPromise = Promise.resolve(null);
const promos = await neatCsv(data);
const logger = (item, result) => console.log(item, result);
function write (item, result) {
return new Promise((resolve, reject) => {
fs.writeFile(`./output/${item.PROMO}.json`, JSON.stringify(result), (err) => {
if (err) { throw err; }
console.log(`Wrote file ${item.PROMO}`);
});
})
}
function asyncFetch(item) {
console.log(`runTask <---------${item.PROMO}---------`);
return fetch(`${baseUrl}${item.PROMO}`, { headers: { 'x-apikey': 'xyz' }})
.then(res => (res.json())
.then(json => json))
}
await promos.reduce(
(p, item) => p.then(() => asyncFetch(item).then(result => write(item, result))),
starterPromise
)
});
csv 文件只是这样的基本布局..
PROMO
12345
56789
98765
...
我们的目标是遍历这些,进行 REST 调用以获取 json 结果并将其写入具有当前促销名称的文件,然后移动到下一个,进行新调用并将该调用保存到不同的文件及其各自的代码。
在reduce中,如果你调用logger而不是write,它工作正常。调用write,它只是一遍又一遍地进行相同的调用并覆盖到同一个文件,迫使我杀死它。请帮忙,我在这里失去理智......
【问题讨论】:
标签: javascript node.js async-await fetch reduce