首先,在这里讨论过多之前,我问过这个问题的简单版本。但是,当我搜索事物时,事情变得更加复杂,我可以对其进行更多描述。
我正在尝试用Google的Blockly创建一个Electron App。在Blockly的域中重命名变量会在用户浏览器中打开提示,要求您输入新变量的名称,就像您在其自己的网站上看到的那样(单击"计数"并选择"重命名变量...")。
问题是:Electron不支持
我安装了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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})); }; |
编辑:来自
现在,我感到困惑的是,关于我自己仍然使用Promises错误还是
希望这有助于解释在查找有关此问题的更多信息后尝试使用的方法。
-
then() 不会返回空白字符串,它将返回一个Promise。但是,您永远不会查看then() 的返回值。您似乎确实在看promptReturn() 的返回值,它将是undefined ,因为没有与promptReturn() 函数关联的return 语句。 -
香港专业教育学院尝试
return r 甚至使then((r) => {newName = r}) ,返回newName 与预先在promptReturn() 中声明的newName。它说" r未定义",newName 也变得未定义。但是我不知道什么是Promise。 - 谷歌存在的好东西。它很容易找出什么是Promise。
-
根据您提供的信息,我在这里找到了一些提示。现在我尝试在
promptReturn() 上的promptReturn() 和callback(promptReturn(message, defaultValue).then((newName) => {return newName})); 上使用then((input) => {var newName = input}) ,但是我得到了"无法读取未定义的属性" ...我真的不明白如何在electron-prompt 中声明Promise。 -
promptReturn 似乎仍然没有return 语句,因此它将返回undefined -
尝试添加分配给
input 的var newName 并在promptReturn() 的末尾将其返回。现在我得到" promptReturn(...)。那不是一个函数"。
我设法解决了这个问题,我将其发布,以防有人需要有关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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))}) } |
-
您在回调中提供的
renameVar 函数不执行任何操作,而是返回名称。 您可以将name 变量直接放在回调中。 另外,每次调用window.prompt() 时,提示都会被覆盖,因此不仅是重命名变量,而且还创建变量。 考虑使用msg 变量来确定提示的用途,并相应地调整标题和标签。