如何在级联式结构中更新保持列表长度的变量? 类数据{ var_controller=StreamController(); ..... 流getAllCurrentRates(){ int numAssets=0; int计数器=0; 这是listAllAssets() .然后((列表){ 如果(列表!=null){ numAssets=list.length; 列表。从(列表) 。其中((map)=>map[“type_is_crypto”]==1) .采取(3) .map((e)=>e[“资产id”].toString()) .forEach((比特币){ 此.getCurrentRate(比特币) .then((速率)=>_controller.sink.add(Map.from(速率))) .完成时(){ 如果(++计数器>=numAssets)_controller.close(); }); }); } }); 返回_controller.stream; } ..... }
返回列表的长度约为2500,此值由如何在级联式结构中更新保持列表长度的变量? 类数据{ var_controller=StreamController(); ..... 流getAllCurrentRates(){ int numAssets=0; int计数器=0; 这是listAllAssets() .然后((列表){ 如果(列表!=null){ numAssets=list.length; 列表。从(列表) 。其中((map)=>map[“type_is_crypto”]==1) .采取(3) .map((e)=>e[“资产id”].toString()) .forEach((比特币){ 此.getCurrentRate(比特币) .then((速率)=>_controller.sink.add(Map.from(速率))) .完成时(){ 如果(++计数器>=numAssets)_controller.close(); }); }); } }); 返回_controller.stream; } ..... },list,dart,List,Dart,返回列表的长度约为2500,此值由numAssets假定,但是,当您看到列表稍后被修改,因此其长度较短时,则计算(++counter>=numAssets)不正确。那么,是否有可能修复保持其当前结构的代码 .take(3)是暂时的,应该稍后删除。“但是,正如您所看到的,列表稍后会被修改,因此其长度较小”。我没有看到任何被修改的列表。确实可以在Iterable上调用许多方法,这些方法返回一个新的Iterable。如果您希望numAssets反映由生成的Iterable的长度。其中(…),您应该首先
numAssets
假定,但是,当您看到列表稍后被修改,因此其长度较短时,则计算(++counter>=numAssets
)不正确。那么,是否有可能修复保持其当前结构的代码
.take(3)
是暂时的,应该稍后删除。“但是,正如您所看到的,列表稍后会被修改,因此其长度较小”。我没有看到任何被修改的列表。确实可以在Iterable
上调用许多方法,这些方法返回一个新的Iterable
。如果您希望numAssets
反映由生成的Iterable
的长度。其中(…)
,您应该首先将该结果分配给一个变量。感谢您谨慎的回复。我也以类似的方式思考,所以我扩展了函数体,但当运行程序时,它不会显示任何响应,所以我尝试了另一种方法。您的方法确实有效,它是这样的:```.map((e)=>e[“资产id”].toString())…every((u)=>++numAssets>0)…forEach((比特币){```先前的代码是另一种方法,这是在where:中。where((map){bool flag=map[“type\u is\u crypto”]==1;if(flag)++numAssets;return flag;})
但是如果我删除,则取(3)
程序会变得一团糟。所以我尝试了另一种方法,但这是另一个问题。
class CoinData {
var _controller = StreamController<Map<String,dynamic>>();
.....
Stream<Map<String,dynamic>> getAllCurrentRates() {
int numAssets = 0;
int counter = 0;
this.listAllAssets()
.then((list) {
if (list != null) {
numAssets = list.length;
List<Map<String, dynamic>>.from(list)
.where((map) => map["type_is_crypto"] == 1)
.take(3)
.map((e) => e["asset_id"].toString())
.forEach((bitCoin) {
this.getCurrentRate(bitCoin)
.then((rate) => _controller.sink.add(Map<String,dynamic>.from(rate)))
.whenComplete(() {
if (++counter >= numAssets) _controller.close();
});
});
}
});
return _controller.stream;
}
.....
}