我想用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 回答
当您使用
next()
调用它时,迭代器将有效地停止在每个yield处执行 .every()
内置JS将接受一个迭代器并试图耗尽它(调用next()
直到迭代器标记迭代器为止) .要使用迭代器(由生成器函数创建或不生成),通常的方法是在_13463中使用它 . 这将有效地获取每个元素并独立处理它,在每次迭代时适当地调用
next()
.