web-dev-qa-db-ja.com

Electron:dialog.showOpenDialogはpromiseを返しませんか?

レンダリングされたスクリプト内から[開く]ダイアログボックスを表示したいと思います。

異なるソースから矛盾する情報を取得していますが、私の知る限り、 https://electronjs.org/docs/api/dialog のドキュメントは、私が使用できるはずであることを示唆しています:

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

私が得るエラーメッセージは:

_TypeError: dialog.showOpenDialog(...).then is not a function
_

これは、dialog.showOpenDialog()がドキュメントに従ってプロミスを返さないことを示唆しています。ドキュメントのサンプルも私にはうまくいきません。

dialog.showOpenDialog(options,callback)を使用できることはわかっていますが、正常に使用できましたが、.then()を使用できないのはなぜですか?

また、オプションのBrowserWindowパラメーターを含めるとハングするため、問題がより広範囲になる可能性があることにも注意してください。

更新:

バージョンに関する下記の@rballの回答を受け入れました。

現在のバージョンは6.xですが、まだElectron 5.xを実行しているようです。ドキュメントでは具体的には触れていませんが、返される結果はバージョン間で変更されているようです。

直感的ではない新しいメジャーバージョンに更新する。更新するために私がしなければならなかったことはここにあります:

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

アップデート2:

完全を期すために、Electronの2つの異なるバージョンに対応するために使用するコードを以下に示します。

_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

npm outdatedを実行して、バージョンを確認します。私のバージョンでは、showOpenDialogは約束ではなく文字列配列を返していました。更新後、動作しました。

1
rball