颤振集团在继续之前等待回应



我有以下代码:

class BidBloc extends Bloc<BidEvent, BidState> {
final FirestoreRepository firestoreRepository;
BidBloc({required this.firestoreRepository}) : super(BidsLoadingState()) {

on<LoadAllBidsEvent>((event, emit) async {
emit(BidsLoadingState());
Item item = event.item;
Future getBids() async {
List<Bid> bids = [];
item.bids?.forEach((element) async {
Bid? bid = await firestoreRepository.getBidByBidId(bidID: element);
if (bid != null) {
DbUser? dbUser = await firestoreRepository.getDBUserByDBUserId(
dbUserID: bid.bidderID);
if (dbUser != null) {
bid.userName = dbUser.userName;
bids.add(bid);
}
}
});
return bids;
}
List<Bid> bids = await getBids();
await getBids();
bids.sort((a, b) => a.timestamp.compareTo(b.timestamp));
BidsLoadedState(bids);
});
}
}

我的bids.sort((a, b) => a.timestamp.compareTo(b.timestamp));在我从存储库检索我的项目之前被触发。因此,BidsLoadedState也会被空出价所推动…

我怎样才能使我的代码在转到下一行之前等待?

谢谢你,

你不能使用forEachasync操作,因为它的回调是VoidCallback而不是AsyncCallback,所以它不能返回任何值

Effective Dart建议使用for循环代替:


for (final element in item.bids) {
final bid = await firestoreRepository.getBidByBidId(bidID: element);
}

试试这个:

class BidBloc extends Bloc<BidEvent, BidState> {
final FirestoreRepository firestoreRepository;
BidBloc({required this.firestoreRepository}) : super(BidsLoadingState()) {
on<LoadAllBidsEvent>(_LoadBirdEvent);
}

_LoadBirdEvent(
LoadAllBidsEvent event,
Emitter<BidState> emit,
) async {
emit(BidsLoadingState());
Item item = event.item;
List<Bid> bids = await getBids();
bids.sort((a, b) => a.timestamp.compareTo(b.timestamp));

BidsLoadedState(bids);
}

Future getBids() async {
List<Bid> bids = [];
item.bids?.forEach((element) async {
Bid? bid = await firestoreRepository.getBidByBidId(bidID: element);
if (bid != null) {
DbUser? dbUser = await firestoreRepository.getDBUserByDBUserId(
dbUserID: bid.bidderID);
if (dbUser != null) {
bid.userName = dbUser.userName;
bids.add(bid);
}
}
});
return bids;
}
}

最新更新