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
});
dialog.showOpenDialog().then().catch()
itself can help. – Calandra