Я занимаюсь разработкой расширения VSCode и хотел бы сделать следующее:
- Запросить у пользователя первое значение (через
window.showInputBox()
- Запросить у пользователя второе значение
- Выполнить действие, используя первое и второе значение
Я нашел быстрое и грязное решение:
function askForFirstValue() {
window.showInputBox(options).then(value => {
firstValue = value;
askForSecondValue();
});
}
function askForSecondValue() {
window.showInputBox(options).then(value => {
secondValue = value;
performAction(firstValue, secondValue);
});
}
Очевидно, это не идеально. Я пытаюсь реализовать более приятное решение с более общей функцией:
function askUserForValue(prompt: string, placeholder: string) {
let options: InputBoxOptions = {
prompt: prompt,
placeHolder: placeholder
}
return window.showInputBox(options)
}
Тогда я бы сделал:
var firstValue = null
var secondValue = null
firstValue = askUserForValue(/*something*/)
secondValue = askUserForValue(/*something*/)
performAction(firstValue, secondValue);
Но когда я делаю это, приглашение закрывается сразу после открытия, и функция performAction
вызывается как firstValue
, а secondValue
по-прежнему null
.
Я понимаю, что это связано с тем, как работают обещания, и я попробовал несколько способов справиться с этими обещаниями, но я новичок в Javascript / Typescript и чувствую, что ухожу в никуда.