向用户询问VSCode扩展中的几个值

时间:2018-07-04 18:48:00

标签: typescript promise visual-studio-code vscode-extensions

我正在开发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 :(得分: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 );
}