我正在开发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的新手,我觉得自己无路可走。
答案 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 );
}