【问题标题】:Await Execution of a Subcommand and Parse its Output等待子命令的执行并解析其输出
【发布时间】:2021-04-21 17:19:42
【问题描述】:

我正在尝试运行命令行工具并解析来自stdout 的输出,以便在 VSCode 扩展中使用它做一些有用的事情。我正在尝试创建 Flow 对象(在代码的其他地方定义)并将它们附加到 this.flows;但是,该函数在设置 this.flows 之前返回。

    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,但不知道如何合并它们以达到预期的效果。

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

【问题讨论】:

    标签: typescript visual-studio-code async-await vscode-extensions thenable


    【解决方案1】:

    您似乎使用的是异步版本的 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);
    }
    

    【讨论】:

    • 我完全想多了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-09-20
    • 2011-12-14
    • 2021-07-05
    • 2020-05-27
    • 2020-02-08
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多