首页 文章

使用Typescript生成器包装数据表rows() . every()

提问于
浏览
1

我想用typescript生成器/迭代器包装rows() . 每个函数

这是我的第一个方法

public * rowIterator1(): IterableIterator<DataTables.RowMethods> {

    var self = this.dataTable;
    this.dataTable.rows().every(function*(rowIdx) {
        console.log(rowIdx);
        let row = self.row(rowIdx);

        yield row;
    });

}

但是当调用yield行时,every()函数不会停止 .

接下来的方法是使用异步生成器

public async * rowIterator3() {

    yield await new Promise((res) => {
        var self = this;
        this.dataTable.rows().every(function (rowIdx) {
            console.log(rowIdx);
            let row = self.dataTable.row(rowIdx);

            res(row);
        });

    });
}

同样的问题,console.log说

0 1 2 3 4

调用yield时函数不会停止

最后我想有这样的事情:

DtWrapper.rows((row: JQuery, index: number) => {
   do something
}

在摆弄几个小时后,这似乎有效 . 尽管使用迭代器并不是我所期望的 .

public * getRows() {    

        let rowIndexes = this.dataTable.rows().indexes();
        let count = rowIndexes.length;

        for (var i = 0; i < count; i++) {
            let rowIndex = rowIndexes[i];
            let row = this.dataTable.row(rowIndex);
            yield $(row.node());
        }
    }

    public test() {


        let t = this.getRows(true);

        let a = t.next();
        a = t.next();
        a = t.next();

}

1 回答

  • 1

    当您使用 next() 调用它时,迭代器将有效地停止在每个yield处执行 .

    every() 内置JS将接受一个迭代器并试图耗尽它(调用 next() 直到迭代器标记迭代器为止) .

    要使用迭代器(由生成器函数创建或不生成),通常的方法是在_13463中使用它 . 这将有效地获取每个元素并独立处理它,在每次迭代时适当地调用 next() .

相关问题