typescript - 异步/等待:不等待对话框关闭
问题描述
我正在使用vscode.window.showOpenDialog
. 它显示一个用于选择目录的对话框 (Windows)。除了 async/await 之外,代码都可以工作。它不等待对话框关闭。如何让函数 getDirectory 等待函数 showDialog 解析所选目录?
函数 getDirectory 立即输出日志 #1,无需等待函数 showDialog。此时dir
为空。正如预期的那样,function showDialog()
在对话框关闭后记录 #2。
扩展名.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);
}
推荐阅读
- java - 没有强大网络时,Android RactiveNetwork 应用程序崩溃
- xamarin - MVVM 数据模型包含方法是一种好习惯吗?
- node.js - PM2 在谷歌应用引擎上不断重启
- azure-active-directory - Azure B2C - 401 未经授权尝试在登录后读取代码中的 id_token
- linux - 如何用 GTK、python 和 glade 制作单窗口程序?
- powershell - 获取 For-Each 数组的结果并显示在一个表格中,每个结果的列标题为一行
- node.js - Express Cookie 会话“未定义”
- android - 了解android编程的xml文件
- tensorflow - Tensorflow:我一直不确定
- javascript - 无法在 javascript 中向我的元素添加活动状态