2016-11-10 57 views
1

我的代碼:如何使用地圖來觸發異步請求但獲得聚合結果?

import 'dart:async'; 

Future<int> expensiveCallFromALib(int value) async { 
    print('expensiveCall($value)'); 
    return value + 1; 
} 

test() { 
    Map<String, int>input = {"one":1, "two":2}; 
    Map result = {}; 

    print("A"); 
    input.forEach((String key, int value) { 
    expensiveCallFromALib(value).then((int value) { 
     result[key] = value; 
    }); 
    print("B"); 
    }); 
    print("C"); 

    print(result); 

} 

main() { 
    test(); 
} 

...與輸出

A 
B 
B 
C 
{} 
expensiveCall(1) 
expensiveCall(2) 

...但我想

A 
B 
expensiveCall(1) 
B 
expensiveCall(2) 
C 
{one: 2, two: 3} 

的一點是,我不能改變的expensiveCallFromALib方法。

回答

0
test() async { 
    Map<String, int>input = {"one":1, "two":2}; 
    Map result = {}; 

    print("A"); 
    for(final key in input.keys) { 
    int value = await expensiveCallFromALib(input[key]); 
     result[key] = value; 

    print("B"); 
    } 
    print("C"); 
    print('result: $result'); 
} 

輸出不正是你想要的,但我想這是足夠接近;-)

HTML OUTPUT 
CONSOLE 
A 
expensiveCall(1) 
B 
expensiveCall(2) 
B 
C 
result: {one: 2, two: 3} 

Plunker example