Прежде всего, я задал более простую версию этого вопроса, прежде чем слишком углубляться в него в здесь а>. Однако по мере того, как я искал вещи, все усложнялось, и я могу описать это немного подробнее.
Я пытаюсь создать приложение Electron с Google Blockly. Переименование переменных в домене Blockly открывает в браузере пользователя приглашение запросить имя новой переменной, как вы можете видеть на собственном веб-сайте (нажмите «Подсчитать» и выберите «Переименовать переменную...»).
Проблема в том, что Electron не поддерживает 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
в Blockly.prompt
не ждет ввода через модальное окно, открытое в setPrompt()
, и выдает ошибку, но если я использую простую функцию, просто возвращающую строку в callback
, она работает как задумано...
Теперь я в замешательстве, если дело в том, что я все еще неправильно использую обещания, или если этот callback
в Blockly.prompt
не поддерживает «ожидание обещаний»...
Надеюсь, это поможет объяснить, что я пытался использовать после поиска дополнительной информации об этой проблеме.
then()
не вернет пустую строку, она вернет обещание. Однако вы никогда не смотрите на возвращаемое значениеthen()
. Похоже, вы смотрите на возвращаемое значениеpromptReturn()
, которое будетundefined
, потому что с вашей функциейpromptReturn()
нет оператораreturn
. - person Quentin   schedule 22.03.2018return r
или даже делалthen((r) => {newName = r})
, возвращаяnewName
с newName, объявленным заранее вpromptReturn()
. Он говорит, что r не определен, иnewName
также становится неопределенным. Я понятия не имею, что такое обещание, хотя... - person BloodySinner   schedule 22.03.2018then((input) => {var newName = input})
наpromptReturn()
иcallback(promptReturn(message, defaultValue).then((newName) => {return newName}));
наBlockly.prompt
, но я получаю Невозможно прочитать свойство 'then' неопределенного... Я действительно не понял, как обещание объявлено вelectron-prompt
... - person BloodySinner   schedule 22.03.2018promptReturn
по-прежнему не имеет оператораreturn
, поэтому он вернетundefined
- person Quentin   schedule 22.03.2018var newName
, присваиваяinput
и возвращая его в концеpromptReturn()
. Теперь я получаю promptReturn(...).then не является функцией. - person BloodySinner   schedule 22.03.2018