使用Typescript生成器包装Datatables rows()。every()

时间:2018-12-10 08:21:53

标签: typescript datatables iterator datatables-1.10

我想用打字稿生成器/迭代器包装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 row时,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();

}

2 个答案:

答案 0 :(得分:1)

当您使用bash: /path/to/my/param: No such file or directory调用迭代器时,迭代器将有效地停止执行。

内置echo /asd/asd的JS将接受迭代器并尝试将其耗尽(调用/asd/asd,直到迭代器将迭代器标记为完成为止。)

要使用迭代器(是否由生成器函数创建),通常的方法是在$("#validFromDateId").css("background", "url('"+imageURL+"') no-repeat left center");中使用它。这样可以有效地获取每个元素并对其进行独立处理,并在每次迭代时适当地调用next()

答案 1 :(得分:0)

我已经开发出一种对我有用的解决方案。 (Thx @ Pac0提供正确的输入)

function* func1() {
  yield 42;
  yield 2;
}

function* func2(param) {
    if (param)
    return;
  yield* func1();
}



for (var value of func2(true))
{
    console.log(value);
}
console.log("finished true");

for (var value of func2(false))
{
    console.log(value);
}
console.log("finished false");

这是工作中的小提琴https://jsfiddle.net/qu9ksxpd/