Je voudrais afficher une boîte de dialogue ouverte à partir d'un script rendu.
Je reçois des informations contradictoires de différentes sources, mais, pour autant que je sache, la documentation sur https://electronjs.org/docs/api/dialog suggère que je devrais pouvoir utiliser:
const dialog = require('electron').remote.dialog;
dialog.showOpenDialog({ title: '…', defaultPath: '…' })
.then(data=>console.log(data));
Le message d'erreur que je reçois est:
TypeError: dialog.showOpenDialog(...).then is not a function
Cela suggère que dialog.showOpenDialog()
ne retourne pas de promesse selon la documentation. L'exemple de la documentation ne fonctionne pas non plus pour moi.
Je sais que je peux utiliser dialog.showOpenDialog(options,callback)
, et je l'ai fait avec succès, mais pourquoi ne puis-je pas utiliser .then()
?
Je note également que si j'inclus le paramètre facultatif BrowserWindow
, il se bloque, donc le problème peut être plus large.
Mettre à jour:
J'ai accepté la réponse de @ rball ci-dessous concernant les versions.
Il semble que j'exécutais toujours Electron 5.x, alors que la version actuelle est 6.x. La documentation ne le mentionne pas spécifiquement, mais le résultat du retour semble avoir changé entre les versions.
Mise à jour vers une nouvelle version majeure non intuitive. Voici ce que je devais faire pour mettre à jour:
npm outdated
npm install electron@latest -g --save
Mise à jour 2:
Par souci d'exhaustivité, voici le code que j'utilise pour accueillir deux versions différentes d'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
});
Courir npm outdated
et vérifiez votre version. Dans ma version, showOpenDialog renvoyait un tableau de chaînes et non une promesse. Après l'avoir mis à jour, cela a fonctionné.