目前,无论何时需要显示数据,我的应用都会在现场提取数据。但是,这确实存在一些延迟和移动数据使用,所以我想构建一个初始化类,它在应用程序启动时执行一次性数据提取,并在整个生命周期中使用它。
但是,async
调用可以不按顺序返回结果,也可能在创建对象之后返回结果,从而导致错误。
我已经检查了async / await
以及如何使用它们来控制执行流程,但是我不太确定for循环是否会等待内部函数完成在迭代到列表中的下一个元素之前。
这是我的代码(到目前为止):
Future fetch() async {
myLinks = fetchDogList();
}
Future process() async {
for (int i = 0; i < myLinks.length; i++) {
await fetchInfo(myLinks[i]);
myDogs.add(new Dog(
name,
type,
age,
color,
gender,
description,
chip,
neutered,
humanBehaviour,
childBehaviour,
petBehaviour,
sledgeMaleBehaviour,
sledgeFemaleBehaviour,
otherDogBehaviour,
otherBehaviour,
jailBreak,
otherThings,
foreignAdoption,
imageLinks));
}
}
Future fetchInfo(String link) {
name = fetchDogInfo(link, labelFetchName);
type = fetchDogInfo(link, labelFetchBreed);
age = fetchDogInfo(link, labelFetchAge);
color = fetchDogInfo(link, labelFetchColor);
gender = fetchDogInfo(link, labelFetchGender);
description = fetchDogDetails(link, labelFetchDescription);
chip = fetchDogDetails(link, labelFetchChip);
neutered = fetchDogDetails(link, labelFetchNeutered);
humanBehaviour = fetchDogDetails(link, labelFetchHumanBehavior);
childBehaviour = fetchDogDetails(link, labelFetchChildBehavior);
petBehaviour = fetchDogDetails(link, labelFetchPetBehavior);
sledgeMaleBehaviour = fetchDogDetails(link, labelFetchSledgeMaleBehavior);
sledgeFemaleBehaviour =
fetchDogDetails(link, labelFetchSledgeFemaleBehavior);
otherDogBehaviour = fetchDogDetails(link, labelFetchOtherDogBehavior);
otherBehaviour = fetchDogDetails(link, labelFetchOtherDogBehavior);
jailBreak = fetchDogDetails(link, labelFetchJailbreak);
otherThings = fetchDogDetails(link, labelFetchOtherThings);
foreignAdoption = fetchDogDetails(link, labelFetchForeignAdoption);
imageLinks = fetchDogImageLinks(link);
}
Future main() async {
await fetch();
await process();
}
如果我理解了所有内容,那么在调用main方法时会发生以下情况:
依此类推,直到它到达myLinks
中的最后一个链接。
以上是否有效,还是应该实施进一步的保护措施?