【发布时间】:2019-10-08 18:29:44
【问题描述】:
我目前有一个看起来像这样的方法:
typedef void MyCallback(int status, String body);
void makeRequest(String url, MyCallback callback) async {
if( someCondition ){
callback(1, '');
}
Response response = await http.get(url);
if( response.httpCode == 200 ){
callback(2, response.body);
}
else{
callback(3, '');
}
}
我想摆脱回调,以便等待makeRequest 的结果。但如果我只是让它返回一个Future,我将无法返回不止一次。
我研究过使用流,但它似乎有点复杂。所以基本上我正在寻找像Future 这样方便的东西,但它可能会收到“部分结果”,即不止一次收到结果。举例说明:
MultiFuture<int> makeRequest(String url){
MultiFuture result = new MultiFuture();
if( someCondition ){
result.value(1);
}
http.get(url).then((response){
if( response.httpCode == 200 ){
result.value(2);
}
else{
result.value(3);
}
result.finish();
});
return result;
}
MultiFuture requestResult = makeRequest('https://example.com');
await requestResult.onValue((int value){
print('value: $value');
});
// When result.finish() is called, the await is finished
使用流是我的最佳选择,还是有某种我不知道的MultiFuture?
【问题讨论】:
-
您只是在描述流。是的,它们比期货稍微复杂一点,但它们完全符合您的用例并且是用语言烘焙的。所以只需标记您的方法
async*并开始yield结果;)。
标签: flutter dart dart-async