Спросите пользователя о нескольких значениях в расширении VSCode - PullRequest
0 голосов
/ 04 июля 2018

Я занимаюсь разработкой расширения 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 и чувствую, что ухожу в никуда.

1 Ответ

0 голосов
/ 06 июля 2018

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

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

async function askUserForIrcInstance() {
    var firstValue = await askUserForValue(/*something*/)
    var secondValue = await askUserForValue(/*something*/)
    return new myObject(firstValue, secondValue );
}
...