等待子命令的执行并解析其输出
Await Execution of a Subcommand and Parse its Output
我正在尝试 运行 命令行工具并解析 stdout
的输出,以便在 VSCode 扩展中使用它做一些有用的事情。我正在尝试创建 Flow
对象(在代码的其他地方定义)并将它们附加到 this.flows
;然而, this.flows
之前的功能 returns 已设置。
getChildren(element?: vscode.TreeItem): Thenable<Flow[]> | Flow[] | null {
if (element === undefined) {
exec(commandToRun, (error, stdout, stderr) => {
let flowJson = JSON.parse(stdout); // output is expected in json format
for (let i =0; i < jsonString.length; ++i) {
let f = new Flow(jsonString[i][name], flowJson[i]['description'], vscode.TreeItemCollapsibleState.None);
this.flows.push(f);
}
}
}
return new Promise<Flow[]>(resolve => resolve(this.flows));
}
我认为它需要使用 await
或 then
,但不确定如何合并它们以达到预期的结果。
非常感谢任何帮助,干杯!
您似乎在使用 exec 的异步版本。
相反,您可以使用 execSync 并避免冗余的异步等待。例如:
let stdout = execSync(commandToRun)
let flowJson = JSON.parse(stdout); // output is expected in json format
for (let i =0; i < jsonString.length; ++i) {
let f = new Flow(jsonString[i][name], flowJson[i]['description'], vscode.TreeItemCollapsibleState.None);
this.flows.push(f);
}
我正在尝试 运行 命令行工具并解析 stdout
的输出,以便在 VSCode 扩展中使用它做一些有用的事情。我正在尝试创建 Flow
对象(在代码的其他地方定义)并将它们附加到 this.flows
;然而, this.flows
之前的功能 returns 已设置。
getChildren(element?: vscode.TreeItem): Thenable<Flow[]> | Flow[] | null {
if (element === undefined) {
exec(commandToRun, (error, stdout, stderr) => {
let flowJson = JSON.parse(stdout); // output is expected in json format
for (let i =0; i < jsonString.length; ++i) {
let f = new Flow(jsonString[i][name], flowJson[i]['description'], vscode.TreeItemCollapsibleState.None);
this.flows.push(f);
}
}
}
return new Promise<Flow[]>(resolve => resolve(this.flows));
}
我认为它需要使用 await
或 then
,但不确定如何合并它们以达到预期的结果。
非常感谢任何帮助,干杯!
您似乎在使用 exec 的异步版本。
相反,您可以使用 execSync 并避免冗余的异步等待。例如:
let stdout = execSync(commandToRun)
let flowJson = JSON.parse(stdout); // output is expected in json format
for (let i =0; i < jsonString.length; ++i) {
let f = new Flow(jsonString[i][name], flowJson[i]['description'], vscode.TreeItemCollapsibleState.None);
this.flows.push(f);
}