Future 的整数值之和
Sum of integer values of a Future
我正在尝试解析 HTML 文档,获取所有图像源,然后将所有图片的大小相加。
解析文档工作正常,获取图像源和获取它们的大小也是如此。
main(){
print("Please input an URL");
var url = stdin.readLineSync();
getImageUrls(url).then((list) {
list.forEach((imageUrl) {
getImageSize(imageUrl).then((r) {
print("$imageUrl, Size: $r bytes");
});
});
});
}
Future<int> getImageSize(String url){
final completer = new Completer();
new StreamController()..stream.listen((str) => completer.complete(imageSize(str)))..add(url);
return completer.future;
}
imageSize(String url){
return http.get(url).then((response) => response.bodyBytes.length);
}
我正在努力将每张图片的大小加在一起成为一个整数。
我想我可以做这样的事情
main(){
int total = 0;
print("Please input an URL");
var url = stdin.readLineSync();
getImageUrls(url).then((list) {
list.forEach((imageUrl) {
getImageSize(imageUrl).then((r) {
print("$imageUrl, Size: $r bytes");
total += r;
});
});
});
print(total);
}
但是我需要等待 getImageUrls 完成才能打印我的总数。
谁能把我推向正确的方向?我觉得我错过了一些非常明显的东西。
最简单的方法是使用 "new" async
/await
main() async {
int total = 0;
print("Please input an URL");
var url = stdin.readLineSync();
var list = await getImageUrls('url');
for(int i = 0; i < list.length; i++) {
var imageUrl = list[i];
var r = await getImageSize(imageUrl);
print("$imageUrl, Size: $r bytes");
total += r;
}
print(total);
}
或评论中提到的Future.wait
main(){
int total = 0;
print("Please input an URL");
var url = stdin.readLineSync();
getImageUrls(url).then((list) {
return Future.wait(list.map((r) {
return getImageSize(imageUrl).then((r) {
print("$imageUrl, Size: $r bytes");
total += r;
});
});
}).then((_) => print(total));
}
我正在尝试解析 HTML 文档,获取所有图像源,然后将所有图片的大小相加。 解析文档工作正常,获取图像源和获取它们的大小也是如此。
main(){
print("Please input an URL");
var url = stdin.readLineSync();
getImageUrls(url).then((list) {
list.forEach((imageUrl) {
getImageSize(imageUrl).then((r) {
print("$imageUrl, Size: $r bytes");
});
});
});
}
Future<int> getImageSize(String url){
final completer = new Completer();
new StreamController()..stream.listen((str) => completer.complete(imageSize(str)))..add(url);
return completer.future;
}
imageSize(String url){
return http.get(url).then((response) => response.bodyBytes.length);
}
我正在努力将每张图片的大小加在一起成为一个整数。 我想我可以做这样的事情
main(){
int total = 0;
print("Please input an URL");
var url = stdin.readLineSync();
getImageUrls(url).then((list) {
list.forEach((imageUrl) {
getImageSize(imageUrl).then((r) {
print("$imageUrl, Size: $r bytes");
total += r;
});
});
});
print(total);
}
但是我需要等待 getImageUrls 完成才能打印我的总数。
谁能把我推向正确的方向?我觉得我错过了一些非常明显的东西。
最简单的方法是使用 "new" async
/await
main() async {
int total = 0;
print("Please input an URL");
var url = stdin.readLineSync();
var list = await getImageUrls('url');
for(int i = 0; i < list.length; i++) {
var imageUrl = list[i];
var r = await getImageSize(imageUrl);
print("$imageUrl, Size: $r bytes");
total += r;
}
print(total);
}
或评论中提到的Future.wait
main(){
int total = 0;
print("Please input an URL");
var url = stdin.readLineSync();
getImageUrls(url).then((list) {
return Future.wait(list.map((r) {
return getImageSize(imageUrl).then((r) {
print("$imageUrl, Size: $r bytes");
total += r;
});
});
}).then((_) => print(total));
}