等待子命令的执行并解析其输出

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));
    }

我认为它需要使用 awaitthen,但不确定如何合并它们以达到预期的结果。

非常感谢任何帮助,干杯!

您似乎在使用 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);
}