Break Dart Statement

时间:2016-06-21 07:11:56

标签: dart angular-dart

我试图让AngularDart教程发挥作用。我已经更改了类的名称,并且正在调用真正的服务器。数据没有回到列表中。我怀疑问题出现在这段代码中:

  final artists = _extractData(response)
  .map((value) => new Artist.fromJson(value))
  .toList();

我想将其分解为单独的声明,但我无法在Internet搜索中找到对.map的任何引用。它不是地图集合上的方法。怎么会分开呢?

完整的方法是:

Future<List<Artist>> getArtists() async {
await HttpRequest.request(_artistsUrl, requestHeaders: headers).then((response) {
final artists = _extractData(response)
  .map((value) => new Artist.fromJson(value))
  .toList();
return artists;
});
}

调用的方法是:

dynamic _extractData(HttpRequest req) {
  Map data = JSON.decode(req.responseText);
  return data;
}

  factory Artist.fromJson(Map<String, dynamic> artist) =>
  new Artist(_toInt(artist['id']),
      artist['first_name'],
      artist['last_name'],
      artist['notes'],
      artist['primary_instrument'],
      artist['other_instruments'],
      artist['birth_year'],
      artist['death_year']
  );

getArtists的来电者是:

class DashboardComponent implements OnInit {
  List<Artist> artists;
  final ArtistService _artistService;
  final Router _router;

  DashboardComponent(this._artistService, this._router);

  Future<Null> ngOnInit() async {
    artists = (await _artistService.getArtists());
    print("Dashboard Length: ${artists.length}"); // this crashes
  }
}

不是答案,而是解决问题的方法

我重写了艺术家:

  Future<List<Artist>> getArtists() async {
    HttpRequest response = await HttpRequest.request(url, requestHeaders: headers);
    List data = JSON.decode(response.responseText);
    final artists = data
          .map((value) => new Artist.fromJson(value))
          .toList();
    return artists;
  }

我汇总了extractData方法。真正的问题在于&#34;返回艺术家&#34;在内部代码块中。结果,它没有返回给getArtists的调用者。 this question也涉及到这个问题,这使得这个问题有点多余。

2 个答案:

答案 0 :(得分:3)

我认为问题是_extractData()应该返回List<Map>,其中每个项目都是序列化Artist

List也有map()方法。

dynamic _extractData(HttpRequest req) {
  List data = JSON.decode(req.responseText);
  return data;
}

会使此代码正常工作

 final artists = _extractData(response)
  .map((value) => new Artist.fromJson(value))
  .toList();

但这取决于response的实际情况。

答案 1 :(得分:1)

问题是您正在使用.then Future返回的HttpRequest.request,并且异步调用其回调参数。所以未来已经完成,但结果列表尚未填写。 await.then的简写,尝试保存await HttpRequest.request对变量的响应并将回调移到其后面。