【发布时间】:2020-09-29 16:08:56
【问题描述】:
我正在尝试从 Google Drive 中获取几个 JSON 文件,然后将它们导出到我的代码中的对象中。我正在使用写入流在本地创建文件,然后使用JSON.parse() 对其进行解析。这是我当前的实现:
function setDB(dbId, dbName) {
let database = {};
drive.files.get({
fileId: dbId,
alt: 'media'
}, {responseType: 'stream'}).then(res => {
console.log(`Writing to ${dbName}.`);
const db = fs.createWriteStream(dbName);
res.data.on('end', () => {
console.log(`Done downloading file ${dbName}.`);
}).on('error', err => {
console.error(`Error downloading file ${dbName}.`);
throw err;
}).pipe(db).on('finish', () => {
database = JSON.parse(fs.readFileSync(`./${dbName}`));
});
});
return database;
}
let variable1 = setDB('variable1Id', 'variable1.json');
let variable2 = setDB('variable2Id', 'variable2.json');
let variable3 = setDB('variable3Id', 'variable3.json');
这里的问题是setDB 返回undefined,因为函数在文件完成下载和流完成写入文件之前返回它的值。我知道我应该使用某种异步/等待,但我找不到放置它们的方式或位置。这也可能不是解决此问题的最佳方法,我很乐意接受有关更好地实现此功能或使代码更简洁或更优雅的任何建议。但是,这里的主要问题是,我该如何让 setDB 返回JSON.parse(fs.readFileSync(`./${dbName}`))?
【问题讨论】:
标签: node.js json async-await google-api