我想创建一个将来的任务队列,并使用一个密钥来避免将已经添加的相同任务添加到队列中。
这是我的情况:
我需要的是:
我了解了StreamQueue和Queue,但是我不知道它是否适合我的需求。
我读到的另一种结构是await for
和流。
所以我尝试了类似的东西:
await for (var url in stream) { // <--- I do not know how create this stream
var url = Uri.https('www.example.com', url);
List<dynamic> tmpItems;
try {
http.Response res = await http.get(url);
final data = json.decode(res.body);
tmpItems = _parseItems(data["data"]);
} catch(e) {
print(e);
}
if (this.mounted) {
return setState(() {
_items.addAll(tmpItems ?? []);
});
}
}
我不知道如何创建stream
并添加到其调用。
答案 0 :(得分:0)
好吧,首先需要有一个具有url的urlArray,然后实现一个名为getUrl的异步方法作为示例,并实现它以从url获取数据,该方法将url作为参数
Future getData(url,index) async {
//here you can call the function and handle the output(return value) as result
getUrl(url).then((result) {
// print(result);
//here check if index is smaller than the array length-1
//if true then call getData function again to get next url
if(index<urlArray.length)
{
--index;
getData(urlArray[index],index);
}
});
}
所以第一个调用将类似于getData(urlArray [0],0)