Async/Await: 不等待对话框关闭
Async/Await: Not waiting for dialog to close
我正在使用 vscode.window.showOpenDialog
编写 VSCode 扩展。它显示了一个用于选择目录的对话框 (Windows)。除了 async/await 之外,该代码有效。它不是在等待对话框关闭。如何让函数 getDirectory 等待函数 showDialog 解析所选目录?
函数getDirectory 立即输出日志#1,无需等待函数showDialog。此时dir
为空。正如预期的那样,function showDialog()
在对话框关闭后记录#2。
extension.ts:
async function getDirectory(): Promise<void> {
const dir = await showDialog();
console.log("#1: " + String(dir)); //Outputs before dialog is closed.
}
function showDialog() {
let dir = "";
const options: vscode.OpenDialogOptions = {
canSelectMany: false,
openLabel: 'Select',
canSelectFiles: false,
canSelectFolders: true
};
vscode.window.showOpenDialog(options).then(fileUri => {
if (fileUri && fileUri[0]) {
console.log('#2: ' + fileUri[0].fsPath); //Outputs when dialog is closed.
dir = String(fileUri[0].fsPath);
}
});
return Promise.resolve(dir);
}
控制台:
#1:
#2: c:\Path\To\Chosen\Directory
- 打字稿 4.3.2.
function getDirectory(){
return new Promise(async (resolve,reject)=>{
const dir = await showDialog();
console.log("#1: " + String(dir)); //Outputs before dialog is closed.
})
}
function showDialog() {
let dir = "";
const options: vscode.OpenDialogOptions = {
canSelectMany: false,
openLabel: 'Select',
canSelectFiles: false,
canSelectFolders: true
};
vscode.window.showOpenDialog(options).then(fileUri => {
if (fileUri && fileUri[0]) {
console.log('#2: ' + fileUri[0].fsPath); //Outputs when dialog is closed.
dir = String(fileUri[0].fsPath);
}
});
return Promise.resolve(dir);
}
我正在使用 vscode.window.showOpenDialog
编写 VSCode 扩展。它显示了一个用于选择目录的对话框 (Windows)。除了 async/await 之外,该代码有效。它不是在等待对话框关闭。如何让函数 getDirectory 等待函数 showDialog 解析所选目录?
函数getDirectory 立即输出日志#1,无需等待函数showDialog。此时dir
为空。正如预期的那样,function showDialog()
在对话框关闭后记录#2。
extension.ts:
async function getDirectory(): Promise<void> {
const dir = await showDialog();
console.log("#1: " + String(dir)); //Outputs before dialog is closed.
}
function showDialog() {
let dir = "";
const options: vscode.OpenDialogOptions = {
canSelectMany: false,
openLabel: 'Select',
canSelectFiles: false,
canSelectFolders: true
};
vscode.window.showOpenDialog(options).then(fileUri => {
if (fileUri && fileUri[0]) {
console.log('#2: ' + fileUri[0].fsPath); //Outputs when dialog is closed.
dir = String(fileUri[0].fsPath);
}
});
return Promise.resolve(dir);
}
控制台:
#1:
#2: c:\Path\To\Chosen\Directory
- 打字稿 4.3.2.
function getDirectory(){
return new Promise(async (resolve,reject)=>{
const dir = await showDialog();
console.log("#1: " + String(dir)); //Outputs before dialog is closed.
})
}
function showDialog() {
let dir = "";
const options: vscode.OpenDialogOptions = {
canSelectMany: false,
openLabel: 'Select',
canSelectFiles: false,
canSelectFolders: true
};
vscode.window.showOpenDialog(options).then(fileUri => {
if (fileUri && fileUri[0]) {
console.log('#2: ' + fileUri[0].fsPath); //Outputs when dialog is closed.
dir = String(fileUri[0].fsPath);
}
});
return Promise.resolve(dir);
}