web-dev-qa-db-fra.com

Electron: dialog.showOpenDialog ne renvoie pas de promesse?

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
    });
5
Manngo

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é.

1
rball