Задайте пользователю несколько значений в расширении VSCode

Я разрабатываю расширение 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 / Typcript, и я чувствую, что никуда не иду.

typescript,promise,visual-studio-code,vscode-extensions,

0

Ответов: 1


0

Рекомендация HaaLeo была полезной, но она точно не работала, как упоминалось. Вот как я это сделал:

askUserForValues().then(value => {
    performAction(value);
});

async function askUserForIrcInstance() {
    var firstValue = await askUserForValue(/*something*/)
    var secondValue = await askUserForValue(/*something*/)
    return new myObject(firstValue, secondValue );
}
машинопись, обещание, зрительно-студия-код, vscode-расширение,
Похожие вопросы