Почему мой QuickPick не ожидает выбора?Javascript

Форум по Javascript
Ответить
Anonymous
 Почему мой QuickPick не ожидает выбора?

Сообщение Anonymous »

tl;dr: Одно использование QuckPick работает, а очень похожее - нет. Меню появляется, но тут же исчезает. Почему?
Я пытаюсь добавить функцию в существующее расширение VSCode. В существующем коде есть класс MyConfigPath, содержащий член класса FlashControl, созданный в конструкторе MyConfigPath. Когда пользователь выбирает команду «Flash» в контекстном меню, вызывается метод flash() соответствующего объекта MyConfigPath. Этот метод начинается с:

Код: Выделить всё

    public async flash(fw:string|undefined=undefined) {
let firmware:string
if (fw === undefined) {
const firmwares = this.getFirmwareSuggestions()
const _firmware:unknown = await this.selectFirmware(firmwares)
if (typeof _firmware !== "string") {
return
}
firmware = _firmware
} else {
firmware = fw
}
getFirmwareSuggestions() возвращает массив строк.

Вот метод selectFirmware() FlashControl:

Код: Выделить всё

    private async selectFirmware(selections:Array) {
return new Promise((resolve) => {
const quickPick = vscode.window.createQuickPick();
quickPick.items = selections.map(choice => ({ label: choice }));

quickPick.title = 'Type or select FW. Acceptes wildcards (38.1.*), exact version and path to nvs:'

quickPick.onDidChangeValue(() => {
// INJECT user values into proposed values
if (!selections.includes(quickPick.value)) {
quickPick.items = [quickPick.value, ...selections].map(label => ({ label }))
}
})

quickPick.onDidAccept(() => {
const selection = quickPick.activeItems[0]
resolve(selection.label)
quickPick.hide()
})
quickPick.show();
})
// var firmware = await vscode.window.showQuickPick({prompt: "FW to flash to or path to nvs"});
}
Это отлично работает. Мне нужно аналогичное поведение из другой части расширения. Я создал для него класс с именем TestbedFlashControl и пытаюсь вызвать его из класса с именем Path. Я понял, что нет веской причины (я думаю) для того, чтобы объект TestbedFlashControl был членом класса Path, поэтому вместо этого я создаю его внутри метода flash() Path. Вот этот метод:

Код: Выделить всё

    public async flash()
{
let flasher : TestbedFlashControl = new TestbedFlashControl(this.fullPath);
log.info('Testbed firmware flash requested', true);
await flasher.flash();
}
Вот методы flash() и selectFirmware() TestbedFlashControl:

Код: Выделить всё

    public async flash()
{
log.info(`Testbed::FlashControl(): flash from firmware requested.`)

let firmware: string;
let fwChoices = this.getFirmwareSuggestions();
const _firmware:unknown = await this.selectFirmware(fwChoices);
if (typeof _firmware !== "string") {
return
}
firmware = _firmware

}

private async selectFirmware(selections:Array)
{
return new Promise((resolve) =>
{
const quickPick = vscode.window.createQuickPick();
quickPick.items = selections.map(choice => ({ label: choice }));

quickPick.title = 'Type or select FW. Acceptes wildcards (38.1.*), exact version and path to nvs:'

quickPick.onDidChangeValue(() => {
// INJECT user values into proposed values
if (!selections.includes(quickPick.value)) {
quickPick.items = [quickPick.value, ...selections].map(label => ({ label }))
}
})

quickPick.onDidAccept(() => {
const selection = quickPick.activeItems[0]
resolve(selection.label)
quickPick.hide()
})
quickPick.show();
})
// var firmware = await vscode.window.showQuickPick({prompt: "FW to flash to or path to nvs"});
}
Когда я нажимаю на элемент контекстного меню, который запускает эту версию flash(), список быстрого выбора появляется на короткое время, а затем исчезает, не дожидаясь, пока я выберу элемент. Что я делаю не так?
Это мой первый опыт работы с JavaScript и TypeScript.

Подробнее здесь: https://stackoverflow.com/questions/798 ... -selection
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»