0

我正在单击一个按钮,该按钮会打开一个对话框以获取文件夹根目录。我目前正在使用调用/句柄。我创建了一个 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)
    })
}
4

0 回答 0