Я использую nodemon
для запуска моего приложения с nodemon index.js
В моем index.js
файле я инициализирую свои функции, используя Puppeteer
INDEX.JS
const dotenv = require("dotenv");
const reddit = require("./reddit");
(async () => {
// ...
await reddit.initialize();
await reddit.login(username, password);
const results = await reddit.getResults();
console.log('got results');
})();
Все это работает, как и ожидалось.
В моей функции initialize()
я настроил Puppeteer
опции
REDDIT.JS
const puppeteer = require("puppeteer");
const fs = require("fs");
const self = {
browser: null,
page: null,
initialize: async () => {
// Select browser
self.browser = await puppeteer.launch({
headless: true,
slowMo: 10,
defaultViewport: null
});
// create new page
self.page = await self.browser.newPage();
},
};
module.exports = self;
Когда у меня возникла проблема, моя getResults()
функция
getResults: async () => {
// ...
await self.page.goto(SUBREDDIT_URL(reddit), { waitUntil: "networkidle0" });
const elements = await self.page.$$(
'#siteTable > div[class*="thing"]:not(.promoted)'
);
const results = [];
await Promise.all(
elements.map(async element => {
// ... logic done that pushes items to results array
})
);
console.log("about to write to file");
await fs.writeFile(
`${__dirname}/results.json`,
JSON.stringify(results),
err => {
console.log("currently writing");
if (err) return false;
return true;
}
);
console.log("finished writing to file");
return await Promise.all(results);
}
Когда я ее запускаю, я получаю в консоли следующее:
about to write to file
finished writing to file
got results
currently writing
Я ожидал
about to write to file
currently writing
finished writing to file
got results
Где я ошибся в том, что моя функция завершается до того, как записан файл?
Любая помощь будет принята с благодарностью.