Electron: dialog.showOpenDialog not returning a promise?

巧了我就是萌 提交于 2020-07-06 11:23:29

问题


I would like to show an Open Dialog box from within a rendered script.

I am getting conflicting information from different sources, but, as far as I can tell, the documentation at https://electronjs.org/docs/api/dialog suggests I should be able to use:

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

The error message I get is:

TypeError: dialog.showOpenDialog(...).then is not a function

That suggests that dialog.showOpenDialog() is not returning a promise as per documentation. The sample in the documentation doesn’t work for me either.

I know that I can use dialog.showOpenDialog(options,callback), and have successfully done so, but why can’t I use .then()?

I also note that if I include the optional BrowserWindow parameter it hangs, so the problem may be broader.

Update:

I have accepted @rball’s answer below regarding versions.

It appears that I was still running Electron 5.x, while the current version is 6.x . The documentation doesn’t specifically mention it, but the return result appears to have changed between versions.

Updating to a new major version not intuitive. Here is what I had to do to update:

npm outdated
npm install electron@latest -g --save

Update 2:

For the sake of completeness, here is the code I use to accommodate two different versions of 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
    });

回答1:


Run npm outdated and check your version. In my version showOpenDialog was returning a string array and not a promise. After updating it, it worked.




回答2:


I think you are reading the wrong version of the documentation. Before version 6, dialog.showOpenDialog() returns a String[] rather than a Promise<Object>.

Here is the documentation:

  • v5.0.11
  • v6.0.0

Hope my answer can help you




回答3:


The same happened to me and my workaround was to apply the then method and get the filePaths i.e

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


来源:https://stackoverflow.com/questions/57839415/electron-dialog-showopendialog-not-returning-a-promise

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!