使用Electron的用户输入JavaScript-Window.Prompt()的替代方案
首先,在深入研究这个问题之前,我问了一个更简单的问题。然而,随着我的搜索,事情变得越来越复杂,我可以更详细地描述它 我正试图用谷歌的Blockly创建一个电子应用程序。重命名Blockly域中的变量会在用户浏览器中打开一个提示,询问新变量的名称,如您所见(单击“计数”并选择“重命名变量…”) 问题是:Electron不支持使用Electron的用户输入JavaScript-Window.Prompt()的替代方案,javascript,electron,blockly,Javascript,Electron,Blockly,首先,在深入研究这个问题之前,我问了一个更简单的问题。然而,随着我的搜索,事情变得越来越复杂,我可以更详细地描述它 我正试图用谷歌的Blockly创建一个电子应用程序。重命名Blockly域中的变量会在用户浏览器中打开一个提示,询问新变量的名称,如您所见(单击“计数”并选择“重命名变量…”) 问题是:Electron不支持window.prompt(),如果我让代码保持原样,它也不会做任何事情,因此,在搜索了一点之后,我了解到您可以块重写。prompt以使用您自己的。我猜:所以你可以使用wind
window.prompt()
,如果我让代码保持原样,它也不会做任何事情,因此,在搜索了一点之后,我了解到您可以块重写。prompt
以使用您自己的。我猜:所以你可以使用window.prompt()的替代方法
我安装并试图使用它在新的提示窗口中获取用户的输入,以将其发送回Blockly处理重命名的核心函数。以下是我正在尝试的:
var prompt = require('electron-prompt');
var setPrompt = function()
{
return prompt
({
title: 'Renaming',
label: 'Renaming variable to:',
type: 'input'
})
};
var getPrompt = function()
{
return setPrompt().then(function(value){return value})
}
var promptReturn = function()
{
return getPrompt().then(function(value){return value})
}
Blockly.prompt = function(message, defaultValue, callback)
{
callback(promptReturn().then(function(value){return value}));
};
编辑:来自电子提示的源代码是,通过查看它和我试图修改的信息,我改为上面的代码,推断提示返回一个承诺。但是,中的回调
似乎是块式的。提示符
没有等待通过setPrompt()
中打开的模式输入并抛出错误,但是如果我使用一个简单的函数只是在回调
中返回一个字符串,它会正常工作
现在我很困惑,是因为我自己仍然在错误地使用承诺,还是因为中的回调
不支持“等待承诺”
希望这有助于解释我在查找有关此问题的更多信息后尝试使用的内容。我设法解决了它,我正在发布它,以防任何人需要有关的明确答案。提示覆盖。重写时的回调
函数似乎必须返回新变量的字符串,因此我尝试在重写中使用承诺
,并调用一个简单函数,仅应用then()
的值,如下所示:
var prompt = require('electron-prompt');
var renameVar = function(name)
{
return name;
}
Blockly.prompt = function(msg, defaultValue, callback)
{
prompt
({
title: 'Renaming',
label: 'Renaming variable to:',
type: 'input'
}).then((name)=>{callback(renameVar(name))})
}
then()
不会返回空字符串,它将返回承诺。但是,您从未查看then()
的返回值。您似乎看到了promptreurn()
的返回值,它将是未定义的
,因为没有与promptreurn()
函数关联的return
语句,返回newName
,并在promptreurn()
中预先声明newName。它表示“r未定义”,并且newName
也未定义。我不知道什么是承诺,不过…谷歌存在是件好事。这让你很容易发现什么是承诺。根据你提供的信息,我找到了一些提示。现在我正在尝试then((input)=>{var newName=input})
onpromptreurn()
和callback(promptreurn(message,defaultValue)。然后((newName)=>{returnnewname})代码>在中被阻塞。提示
但我得到“无法读取未定义的属性”then”。。。我真的不明白在electron-prompt
中声明的承诺是如何实现的,promptreurn
似乎仍然没有return
语句,因此它将返回undefined
您在回调中提供的renameVar
函数除了返回名称之外什么都不做。您可以直接将name
变量放入回调中。此外,每次调用window.prompt()
,都会覆盖提示,因此不仅用于重命名变量,也用于创建变量。考虑使用<代码> MSG变量来确定提示正在使用什么,并相应地调整标题和标签。