如何把这个功能变成未来?
How to turn this function into a future?
我想我会因为问这个问题而被责备,但我已经搜索了一段时间,希望得到一点帮助!
我有这段代码。我将如何放弃必须使用回调而只是 return 一个未来。
void getProducts({required Function() callback}) {
List<Product> results = [];
_firestore
.collection('available_products')
.get()
.then((QuerySnapshot querySnapshot) {
for (var doc in querySnapshot.docs) {
print(doc);
results.add(Product(
name: doc['name'],
category: doc['category'],
description: doc['description'],
price: doc['price']));
}
allProducts = results;
callback();
}).onError((error, stackTrace) {
print(error);
});
}
试试这个
Future<void> getProducts({required Function() callback}) async{
List<Product> results = [];
await _firestore
.collection('available_products')
.get()
.then((QuerySnapshot querySnapshot) {
for (var doc in querySnapshot.docs) {
print(doc);
results.add(Product(
name: doc['name'],
category: doc['category'],
description: doc['description'],
price: doc['price']));
}
allProducts = results;
callback();
}).onError((error, stackTrace) {
print(error);
});
}
而不是 void
使用您想要的数据类型 return, List<Product>
.
其余代码只是将 .then
语法转换为 async await
语法。不过,您仍然可以使用 .then
语法。这只是更容易理解 IMO。
这是代码片段。
Future<List<Product>> getProducts() async {
List<Product> results = [];
try {
final querySnapshot =
await _firestore.collection('available_products').get();
for (var doc in querySnapshot.docs) {
print(doc);
results.add(Product(
name: doc['name'],
category: doc['category'],
description: doc['description'],
price: doc['price']
));
}
allProducts = results;
} catch (error) {
print(error);
}
return results;
}
此外,您可以 return 任何其他数据类型来代替 List<Product>
。
我想我会因为问这个问题而被责备,但我已经搜索了一段时间,希望得到一点帮助!
我有这段代码。我将如何放弃必须使用回调而只是 return 一个未来。
void getProducts({required Function() callback}) {
List<Product> results = [];
_firestore
.collection('available_products')
.get()
.then((QuerySnapshot querySnapshot) {
for (var doc in querySnapshot.docs) {
print(doc);
results.add(Product(
name: doc['name'],
category: doc['category'],
description: doc['description'],
price: doc['price']));
}
allProducts = results;
callback();
}).onError((error, stackTrace) {
print(error);
});
}
试试这个
Future<void> getProducts({required Function() callback}) async{
List<Product> results = [];
await _firestore
.collection('available_products')
.get()
.then((QuerySnapshot querySnapshot) {
for (var doc in querySnapshot.docs) {
print(doc);
results.add(Product(
name: doc['name'],
category: doc['category'],
description: doc['description'],
price: doc['price']));
}
allProducts = results;
callback();
}).onError((error, stackTrace) {
print(error);
});
}
而不是 void
使用您想要的数据类型 return, List<Product>
.
其余代码只是将 .then
语法转换为 async await
语法。不过,您仍然可以使用 .then
语法。这只是更容易理解 IMO。
这是代码片段。
Future<List<Product>> getProducts() async {
List<Product> results = [];
try {
final querySnapshot =
await _firestore.collection('available_products').get();
for (var doc in querySnapshot.docs) {
print(doc);
results.add(Product(
name: doc['name'],
category: doc['category'],
description: doc['description'],
price: doc['price']
));
}
allProducts = results;
} catch (error) {
print(error);
}
return results;
}
此外,您可以 return 任何其他数据类型来代替 List<Product>
。