我正在单击一个按钮,该按钮会打开一个对话框以获取文件夹根目录。我目前正在使用调用/句柄。我创建了一个 promise 函数来返回我的数据,但不确定如何将我的数据从 preload.js 移动到 renderer.js
主.js
ipcMain.handle(HANDLE_FETCH_DATA, (events) => {
dialog.showOpenDialog(win, {
properties: ['openDirectory']
}).then(result => {
if (result.canceled === true) return;
const filePath = result.filePaths[0]
return crawlDirectory(filePath)
})
})
预加载.js
loadDirectory(channel) {
return ipcRenderer.invoke(channel)
}
渲染器.js
async function loadDirectoryFolders() {
// Activate ShowDialog
const data = await app.filesApi.loadDirectory(HANDLE_FETCH_DATA)
console.log(data)
}
CrawlDirectory(文件路径)
const crawlDirectory = (dir) => {
return new Promise((resolve, reject) => {
const folderName = path.basename(dir);
// create new model object
const model = {
id: short.generate(),
name: folderName,
children: [],
toggled: false,
active: false,
loading: false,
decorators: {},
animations: []
};
//model['name'] = folderName;
const folders = fs.readdirSync(dir).filter(file => file !== '.DS_Store'); //['Dance', 'Disco', 'Hip Hop', 'House', 'R&B', 'Reggae']
for (let folder in folders) {
let next = path.join(dir, folders[folder]);
let isDirectory = fs.lstatSync(next).isDirectory();
if (isDirectory) {
model['children'].push(crawlDirectory(next))
} else {
model['children'].push({ name: path.basename(next) })
}
}
resolve(model)
})
}