首先,我已经问了这个问题的一个更简单的版本,然后在这里中对它进行了太多的研究。然而,当我搜索东西时,事情变得更复杂了,我可以更多地描述它。
我正试图与谷歌的Blockly一起创建一个电子应用程序。在Blockly的域中重命名变量会在用户浏览器中打开一个提示,询问新变量的名称,因为您可以看到在自己的网站上 (单击'Count‘并选择'Rename变量.’)。
问题是:电子不支持window.prompt()
,如果我让代码按原样运行,它也不会做任何事情,所以,在搜索了一点之后,我了解到可以重写Blockly.prompt
来使用自己的代码。我猜:所以你可以用一个替代window.prompt()
的方法
我安装了electron-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}));
};
编辑:来自electron-prompt
的源代码是这里,通过查看它和我试图从这里修改的信息,我修改了上面的代码,推断prompt
返回了一个承诺。然而,callback
in Blockly.prompt
似乎并不等待通过setPrompt()
中打开的模式输入并抛出一个错误,但是如果我使用一个简单的函数只是在callback
中返回一个字符串,它就会按预期的方式工作。
现在,我感到困惑的是,是我自己仍然错误地使用了承诺,还是callback
in Blockly.prompt
不支持“等待承诺”.
希望这有助于解释我在查找有关这个问题的更多信息后尝试使用的内容。
发布于 2018-03-24 06:44:40
我设法解决了这个问题,我正在发布它,以防有人需要一个关于Blockly.prompt
重写的明确答案。在重写时,callback
函数似乎必须返回新变量的字符串,因此我尝试在重写过程中使用promise
,并调用一个简单的函数来应用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))})
}
https://stackoverflow.com/questions/49426346
复制相似问题