Освоение асинхронного картографирования в Dart: подробное руководство

Когда дело доходит до асинхронного программирования в Dart, ключевые слова asyncи awaitпредоставляют мощный способ работы с асинхронными операциями. Одним из наиболее часто используемых методов в пакете Dart asyncявляется map. В этой статье мы погрузимся в мир асинхронного отображения в Dart, изучая различные методы и приемы использования возможностей mapдля создания эффективного и лаконичного кода. Независимо от того, новичок вы или опытный разработчик, это руководство поможет вам повысить уровень своих навыков асинхронного программирования на Dart.

Методы асинхронного сопоставления:

  1. Базовый map:
    Базовое использование mapочень похоже на его синхронный аналог. Он принимает функцию обратного вызова, которая асинхронно преобразует каждый элемент коллекции и возвращает новую коллекцию с преобразованными значениями. Вот пример:
Future<List<int>> doubleNumbers(List<int> numbers) async {
  return numbers.map((number) async {
    await Future.delayed(Duration(seconds: 1)); // Simulating an asynchronous operation
    return number * 2;
  }).toList();
}
void main() async {
  List<int> numbers = [1, 2, 3, 4, 5];
  List<int> doubledNumbers = await doubleNumbers(numbers);
  print(doubledNumbers); // Output: [2, 4, 6, 8, 10]
}
  1. mapAsync:
    Метод mapAsync, предоставляемый пакетом async, позволяет асинхронно отображать коллекцию. и возвращает одно будущее. Это может быть полезно, если вы хотите выполнить некоторые дополнительные операции после завершения сопоставления. Вот пример:
import 'package:async/async.dart';
Future<List<int>> doubleNumbers(List<int> numbers) async {
  final mappedNumbers = numbers.mapAsync((number) async {
    await Future.delayed(Duration(seconds: 1)); // Simulating an asynchronous operation
    return number * 2;
  });
  final transformedList = await mappedNumbers.toList();
  // Perform additional operations on the transformed list
  return transformedList;
}
void main() async {
  List<int> numbers = [1, 2, 3, 4, 5];
  List<int> doubledNumbers = await doubleNumbers(numbers);
  print(doubledNumbers); // Output: [2, 4, 6, 8, 10]
}
  1. asyncMap:
    Метод asyncMapпохож на map, но возвращает одно будущее, которое завершается список преобразованных значений. Это может быть полезно, если вы хотите дождаться завершения всех преобразований, прежде чем продолжить. Вот пример:
Future<List<int>> doubleNumbers(List<int> numbers) async {
  return await Future.wait(numbers.asyncMap((number) async {
    await Future.delayed(Duration(seconds: 1)); // Simulating an asynchronous operation
    return number * 2;
  }));
}
void main() async {
  List<int> numbers = [1, 2, 3, 4, 5];
  List<int> doubledNumbers = await doubleNumbers(numbers);
  print(doubledNumbers); // Output: [2, 4, 6, 8, 10]
}
  1. stream.map:
    Если вы работаете с потоками в Dart, вы можете использовать метод map, предоставляемый 19класс. Это позволяет асинхронно преобразовывать события потока. Вот пример:
import 'dart:async';
Stream<int> doubleNumbers(Stream<int> numbers) {
  return numbers.map((number) async* {
    await Future.delayed(Duration(seconds: 1)); // Simulating an asynchronous operation
    yield number * 2;
  });
}
void main() {
  Stream<int> numbers = Stream.fromIterable([1, 2, 3, 4, 5]);
  Stream<int> doubledNumbers = doubleNumbers(numbers);
  doubledNumbers.listen((number) {
    print(number); // Output: 2, 4, 6, 8, 10
  });
}

В этой статье мы рассмотрели различные методы асинхронного сопоставления в Dart. Мы рассмотрели базовое использование map, методов mapAsyncи asyncMapдля более сложных сценариев, а также метода map. для потоковых преобразований. Овладев этими приемами, вы сможете писать более эффективный и выразительный асинхронный код в Dart.