2013-08-24 2 views

답변

20

당신이 필요로하는 경우

나는 그것의 아래, 실제로 비동기 호출 (파일 읽기/아약스/등)을 수행하거나 로컬 변수를 받고 있는지 항상 Future<List<Base>>을 반환하는 함수를 정의 할 미래를 만들려면 Completer을 사용할 수 있습니다. 문서의 Completer class을 참조하십시오. 다음은 예입니다

Future<List<Base>> GetItemList(){ 
    var completer = new Completer(); 

    // At some time you need to complete the future: 
    completer.complete(new List<Base>()); 

    return completer.future; 
} 

그러나 대부분의 시간을 당신이 completer와 미래를 만들 필요가 없습니다. 이 경우처럼 :

Future<List<Base>> GetItemList(){ 
    var completer = new Completer(); 

    aFuture.then((a) { 
    // At some time you need to complete the future: 
    completer.complete(a); 
    }); 

    return completer.future; 
} 

코드는 completers를 사용하여 매우 복잡해질 수 있습니다. then()Future을 반환하기 때문에 당신은 단순히 너무, 다음 대신 사용할 수 있습니다

Future<List<Base>> GetItemList(){ 
    return aFuture.then((a) { 
    // Do something.. 
    }); 
} 

또는 파일 입출력에 대한 예제 :

Future<List<String>> readCommaSeperatedList(file){ 
    return file.readAsString().then((text) => text.split(',')); 
} 

더 팁 this blog post를 참조하십시오.

관련 문제