如何等待打字稿中的查询功能完成

问题描述 投票:0回答:1

我编写了将二进制树反序列化为字符串的程序。

let serializedTreeString: string = '';
class BinaryTreeNode {
    _val: number;
    _left: BinaryTreeNode;
    _right: BinaryTreeNode;
    constructor(val: number, left: BinaryTreeNode = null, right: BinaryTreeNode = null) {
        this._val = val;
        this._left = left;
        this._right = right;

    }
}

function _serialize(current: BinaryTreeNode) {
    if (current === null) {
        serializedTreeString = serializedTreeString.concat('-1,');
    } else {
        serializedTreeString = serializedTreeString.concat(current._val + ',');
        _serialize(current._left);
        _serialize(current._right);
    }
}

function serialize(current: BinaryTreeNode) {
    let serializedTreeString: string = '';
    _serialize(current);
    console.log(serializedTreeString);
}

let root: BinaryTreeNode = new BinaryTreeNode(20, new BinaryTreeNode(8, new BinaryTreeNode(4), new BinaryTreeNode(12, new BinaryTreeNode(10), new BinaryTreeNode(14))), new BinaryTreeNode(22));
serialize(root);

当我打印serializedTreeString时,其空白为java脚本是异步的。我可以使用一个计数器,该计数器会在每次调用_serialize时增加,并在_serialize内部减少。这样我可以检查计数器是否已达到0并打印serializedTreeString的值。有更好的方法吗?

typescript recursion callback
1个回答
0
投票

您得到一个空字符串不是因为javascript是异步的(示例​​中的所有调用都是同步的)。这是因为您在serialize内部隐藏了外部变量定义。只需删除let前面的serializedTreeString

function serialize(current: BinaryTreeNode) {
    serializedTreeString = '';
    _serialize(current);
    console.log(serializedTreeString);
}

通常,在这种情况下最好避免使用全局变量,而使用return代替:

class BinaryTreeNode {
    _val: number;
    _left: BinaryTreeNode;
    _right: BinaryTreeNode;
    constructor(val: number, left: BinaryTreeNode = null, right: BinaryTreeNode = null) {
        this._val = val;
        this._left = left;
        this._right = right;

    }
}

function serialize(current: BinaryTreeNode): string {
    if (current === null) {
        return "-1,";
    } else {
        return `${current._val},${serialize(current._left)}${serialize(current._right)}`;
    }
}

let root: BinaryTreeNode = new BinaryTreeNode(20, new BinaryTreeNode(8, new BinaryTreeNode(4), new BinaryTreeNode(12, new BinaryTreeNode(10), new BinaryTreeNode(14))), new BinaryTreeNode(22));
console.log(serialize(root));
© www.soinside.com 2019 - 2024. All rights reserved.