Мне нужна помощь с этим помощником, которого я пишу. По какой-то причине, используя сокращение в asyn c в 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-файл - это просто базовый c макет, подобный такому.
PROMO
12345
56789
98765
...
Цель состоит в том, чтобы перебрать их, выполнить вызов REST, чтобы получить результаты json, и записать их в файл с именем текущего промо, а затем перейти к следующему, сделать новый вызов и сохранить его в другом файле с соответствующий код.
В редукте, если вы вызываете logger вместо write, он работает нормально. При вызове write он просто делает один и тот же вызов снова и снова и перезаписывает один и тот же файл, заставляя меня убить его. Пожалуйста, помогите, я схожу с ума здесь ...