电子:dialog.showOpenDialog不返回承诺?

时间:2019-09-08 05:31:41

标签: electron es6-promise renderer opendialog

我想从渲染的脚本中显示一个“打开对话框”。

我从不同的来源获得冲突的信息,但是据我所知,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

3 个答案:

答案 0 :(得分:2)

我认为您阅读的文档版本错误。在版本6之前,dialog.showOpenDialog()返回String[]而不是Promise<Object>

以下是文档:

希望我的回答可以帮助您

答案 1 :(得分:1)

运行npm outdated并检查您的版本。在我的版本中,showOpenDialog返回一个字符串数组而不是一个Promise。更新后,它可以正常工作。

答案 2 :(得分:1)

我也遇到了同样的事情,我的解决方法是应用 then 方法并获取 filePaths

dialog.showOpenDialog({
   properties: ['openDirectory']
}).then((data) => {
   console.log(data.filePaths);
});