电子:dialog.showOpenDialog 没有返回承诺?

Man*_*ngo 8 renderer opendialog es6-promise electron

我想从呈现的脚本中显示一个打开对话框。

我从不同来源获得相互矛盾的信息,但据我所知,https: //electronjs.org/docs/api/dialog 上的文档表明我应该能够使用:

const dialog = require('electron').remote.dialog;
dialog.showOpenDialog({ title: '…', defaultPath: '…' })
.then(data=>console.log(data));
Run Code Online (Sandbox Code Playgroud)

我得到的错误信息是:

TypeError: dialog.showOpenDialog(...).then is not a function
Run Code Online (Sandbox Code Playgroud)

这表明它dialog.showOpenDialog()没有根据文档返回承诺。文档中的示例也不适用于我。

我知道我可以使用dialog.showOpenDialog(options,callback),并且已经成功使用,但为什么我不能使用.then()

我还注意到,如果我包含BrowserWindow它挂起的可选参数,那么问题可能会更广泛。

更新:

我已接受@rball 在下面关于版本的回答。

看来我仍在运行 Electron 5.x,而当前版本是 6.x 。文档没有具体提到它,但返回结果似乎在版本之间发生了变化。

更新到新的主要版本不直观。这是我必须做的更新:

npm outdated
npm install electron@latest -g --save
Run Code Online (Sandbox Code Playgroud)

更新 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
    });
Run Code Online (Sandbox Code Playgroud)

小智 10

同样的事情发生在我身上,我的解决方法是应用then方法并获取文件路径,

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


小智 6

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

这是文档:

希望我的回答能帮到你


rba*_*all 2

运行npm outdated并检查您的版本。在我的版本中,showOpenDialog 返回一个字符串数组,而不是一个承诺。更新之后,就成功了。