2013-08-24 3 views
12

Можно ли создать свое собственное будущее в Dart, чтобы вернуться из ваших методов, или вы всегда должны возвращать построенный в будущем возврат из одного из методов асинхронных меток дартс?Dart, как создать будущее, чтобы вернуться в свои собственные функции?

Я хочу, чтобы определить функцию, которая всегда возвращает Future<List<Base>>, действительно ли его делать асинхронный вызов (файл для чтения/Ajax/и т.д.) или просто получить локальную переменную, как показано ниже:

List<Base> aListOfItems = ...; 

Future<List<Base>> GetItemList(){ 

    return new Future(aListOfItems); 

} 

ответ

20

Если вам нужно для создания будущего, вы можете использовать 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; 
} 

Но в большинстве случаев вам не нужно создавать будущее с дополнением. Как и в этом случае:

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; 
} 

Код может стать очень сложным с использованием дополнений. Вы можете просто использовать следующие вместо этого, потому что 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 дополнительные советы.