电子:dialog.showOpenDialog 没有返回承诺?
Electron: dialog.showOpenDialog not returning a 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()
不是 return 文档中的承诺。文档中的示例也不适合我。
我知道我可以使用dialog.showOpenDialog(options,callback)
,并且已经成功使用,但为什么我不能使用.then()
?
我还注意到,如果我包含可选的 BrowserWindow
参数,它会挂起,所以问题可能更广泛。
更新:
我已经接受@rball 下面关于版本的回答。
看来我还是运行 Electron 5.x,而当前版本是6.x。文档没有具体提及,但 return 结果似乎在不同版本之间发生了变化。
更新到新的主要版本不直观。这是我必须做的更新:
npm outdated
npm install electron@latest -g --save
更新 2:
为了完整起见,这里是我用来适应两个不同版本的 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
});
我认为您阅读的文档版本有误。在版本 6 之前,dialog.showOpenDialog()
returns 是 String[]
而不是 Promise<Object>
.
这是文档:
希望我的回答能帮到您
运行 npm outdated
并检查您的版本。在我的版本中,showOpenDialog 返回的是一个字符串数组,而不是一个承诺。更新后成功了
我也遇到了同样的情况,我的解决方法是应用 then 方法并获取 filePaths
即
dialog.showOpenDialog({
properties: ['openDirectory']
}).then((data) => {
console.log(data.filePaths);
});
我想在呈现的脚本中显示一个打开对话框。
我从不同的来源得到了相互矛盾的信息,但据我所知,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()
不是 return 文档中的承诺。文档中的示例也不适合我。
我知道我可以使用dialog.showOpenDialog(options,callback)
,并且已经成功使用,但为什么我不能使用.then()
?
我还注意到,如果我包含可选的 BrowserWindow
参数,它会挂起,所以问题可能更广泛。
更新:
我已经接受@rball 下面关于版本的回答。
看来我还是运行 Electron 5.x,而当前版本是6.x。文档没有具体提及,但 return 结果似乎在不同版本之间发生了变化。
更新到新的主要版本不直观。这是我必须做的更新:
npm outdated
npm install electron@latest -g --save
更新 2:
为了完整起见,这里是我用来适应两个不同版本的 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
});
我认为您阅读的文档版本有误。在版本 6 之前,dialog.showOpenDialog()
returns 是 String[]
而不是 Promise<Object>
.
这是文档:
希望我的回答能帮到您
运行 npm outdated
并检查您的版本。在我的版本中,showOpenDialog 返回的是一个字符串数组,而不是一个承诺。更新后成功了
我也遇到了同样的情况,我的解决方法是应用 then 方法并获取 filePaths 即
dialog.showOpenDialog({
properties: ['openDirectory']
}).then((data) => {
console.log(data.filePaths);
});