我正在写一个脚本,它会打开我放在特定文件夹中的所有书签。我正在使用" fs" module" readFile"从书签文件中获取数据的方法,以及一些实用程序方法,用于向下钻取数据并构造要打开的URL数组。
我遇到的麻烦是虽然文件数据是可访问的,并且我可以使用我班级中的其他方法来操作它,但我似乎无法从" fs.readFile&返回结果#34;打回来。这是代码(我可以添加其余的类,如果有人会发现有帮助的话)
readBookmarks() {
fs.readFile(path.join(homeDir() + "/Library/Application " + "Support/Google/Chrome/Default/Bookmarks"),
(error, data) => {
if (error) {
throw error;
}
if (data){
console.log(this.constructUrlList(data)); //outputs an array of urls like I expect
return this.constructUrlList(data); // returns undefined
}
});
}
我觉得我错过了什么。我得到了#34; fs.readFile"是异步的,但是一旦加载文件缓冲区,回调是否只会触发?如果没有,为什么数据可用于" console.log"?
感谢您的帮助
更新:感谢阅读发布的dup jfriend00,我现在理解模块化,异步js的良好模式。这是重构的代码:
openLinks() {
this.readBookmarks().then((data) => {
const urlList = this.constructUrlList(data);
for(let url of urlList) {
opn(url, {app: 'Safari'});
}
process.exit();
}).catch((error) => {
console.error("Unable to read the file due to error: " + error.stack);
})
}
readBookmarks() {
return new Promise((resolve, reject) => {
fs.readFile(path.join(homeDir(), "/Library/Application Support/Google/Chrome/Default/Bookmarks"),
(error, data) => {
error ? reject(error) : resolve(data);
});
});
}