Я пытаюсь найти способ записать данные json в файл в корзине Google Cloud Storage внутри обещания.
Я обнаружил, что если я попробую и .pu sh () значения в массиве одно за другим, а затем верну его, он даст мне только первые 3 результата из массива (тогда как console.log вернет все. *
Итак, по сути, мой вопрос: есть ли способ написать обещание или подобное, которое будет ждать, пока будут собраны все зацикленные значения, и как только это будет сделано, вернуть эти значения в функцию, которая затем загрузит их все в GCS?
Или есть способ, которым я могу записать эти значения в файл. json в GCS асинхронно, одновременно с очисткой данных?
const urls = [/* 20+ URLs go here... */];
let promises = [];
// Build array of Promises
urls.map(function(url) {
promises.push(axios.get(url));
});
// Map through the array of promises and get the response results
axios.all(promises).then((results) => {
results.map((res) => {
try {
// Scrape the data
const $ = new JSDOM(res.data);
const data = {};
data.title = ($.window.document.querySelector('head > title') !== null ? $.window.document.querySelector('head > title').text : '');
data.description = ($.window.document.querySelector("meta[name='description']") !== null ? $.window.document.querySelector('meta[name="description"]').content : '');
data.robots = ($.window.document.querySelector("meta[name='robots']") !== null ? $.window.document.querySelector("meta[name='robots']").content : '');
const value = JSON.stringify(data) + '\n';
// Tried array.push(value) here but doesn't return all the values?
// Any way to return all the values and then bulk upload them to GCS outside of this code block?
const file = storage.bucket(bucketName).file(filename);
file.save(value, function(err) {
if (!err) {
// file written
}
})
} catch(e) {
console.log(e);
}
})
})
Извините за плохое объяснение, по сути, я не могу поместить sh все значения в массив, а затем загрузить их, и если я попытаюсь загрузить значения по одному, я получаю только последние v alue в циклическом массиве.
Примечание: Я не пытаюсь сохранить данные в файл. json локально с помощью fs.writeFile (), а затем загрузить в GCS, но отправить данные JSON напрямую в GCS без промежуточных шагов.