gpt4 book ai didi

node.js - fs.readdirSync 卡住 Electron 应用程序

转载 作者:太空宇宙 更新时间:2023-11-04 00:13:27 25 4
gpt4 key购买 nike

从渲染器进程中以递归方式调用 fs.readdirSync 会卡住应用程序。

macOS 10.12.6Windows 10 上使用最新的 Electron 1.7.9 时会发生这种情况

STR:

  • 从 devtools 运行以下函数并尝试通过 Electron 应用程序单击

change dir with some large directory which contains many files, so function run for some time

var fs = require('fs')
var path = require('path')

var dir = '/Users'
var totalFiles = [0]
var filesArray = []
var sizesArray = []


function getFilesRecursively(dir, totalFiles, filesArray, sizesArray){

try { var files = fs.readdirSync(dir); }
catch(err) { } // 'fs.readdirSync(dir) -', console.warn(err.message) }

for(var i in files){

var name = path.join(dir, files[i])

try {

let stats = fs.lstatSync(name) // track symlink as link, but not as file

if (stats.isDirectory())
getFilesRecursively(name, totalFiles, filesArray, sizesArray)


// filtering out symlinks, sockets etc
else if (stats.isFile()) {

// we can't use regular counter, since incrementing a primitive value doesn't change the value back in the caller function's scope.
// https://stackoverflow.com/a/48378462/4537590
totalFiles[0]++

// filtering out 0 size files
if (stats.size > 0) {
sizesArray.push(stats.size)
filesArray.push(name)
}
}

} catch(err) { } // console.warn('fs.lstatSync(name) -', err.message) }

}

console.log(filesArray.length) // console logging to see function progress
return { "files" : filesArray, "sizes" : sizesArray, "total_files" : totalFiles }
}

///////////////////////////////////////////

getFilesRecursively(dir, totalFiles, filesArray, sizesArray)

我已经在 Electron API Demos 上对此进行了测试应用程序以及使用 "electron": "~1.6.2" 它也会卡住。

请帮忙

最佳答案

由于这是回答您问题的回复,因此我重写我的评论:

正如文档中所解释的,fs.readdirSync是一个同步操作,这是正常的,它会在处理时占用您的手并阻止应用程序的其余部分。

如果你想避免这种情况,你必须使用异步方法 fs.readdir相反,在准备好时调用回调,或者使用 bluebird 对其进行“ promise ”或将其 package 到 promise 中。

关于node.js - fs.readdirSync 卡住 Electron 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48397128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com