【发布时间】:2024-01-10 02:21:01
【问题描述】:
我想在渲染的脚本中显示一个打开对话框。
我从不同来源获得了相互矛盾的信息,但据我所知,https://electronjs.org/docs/api/dialog 的文档表明我应该能够使用:
const dialog = require('electron').remote.dialog;
dialog.showOpenDialog({ title: '…', defaultPath: '…' })
.then(data=>console.log(data));
我得到的错误信息是:
TypeError: dialog.showOpenDialog(...).then is not a function
这表明dialog.showOpenDialog() 没有按照文档返回承诺。文档中的示例也不适用于我。
我知道我可以使用dialog.showOpenDialog(options,callback),并且已经成功了,但是为什么我不能使用.then()?
我还注意到,如果我包含可选的 BrowserWindow 参数,它会挂起,所以问题可能更广泛。
更新:
我已接受@rball 下面关于版本的回答。
看来我仍在运行 Electron 5.x,而当前版本是 6.x。文档没有具体提及,但返回结果似乎在版本之间有所不同。
更新到新的主要版本不直观。这是我必须做的更新:
npm outdated
npm install electron@latest -g --save
更新 2:
为了完整起见,这里是我用来容纳两个不同版本的 Electron 的代码:
if(dialog.showOpenDialog.then)
dialog.showOpenDialog({
title: 'Title',
defaultPath: '…'
})
.then(result=> {
if(result.canceled) return;
var files=result.filePaths;
// process
});
else
dialog.showOpenDialog({
title: 'Title',
defaultPath: '…'
},result=> {
if(result===undefined) return;
var files=result;
// process
});
【问题讨论】:
-
不确定,但可能会在 promise 对象上发现错误,即
dialog.showOpenDialog().then().catch()本身可以提供帮助。 -
Shoot 也遇到了同样的问题。可惜没人回答。
标签: electron es6-promise renderer opendialog