【发布时间】:2020-01-24 22:16:31
【问题描述】:
我正在使用 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
我的函数在写入文件之前完成,我在哪里出错了?
任何帮助将不胜感激。
【问题讨论】:
-
尝试使用
require('fs').promises而不是require('fs')。 -
@Titus 不是 100% 确定这是否有什么不同,因为我没有在控制台中登录
currently writing,但文件确实更新了
标签: javascript node.js async-await puppeteer fs