带有泛型的Dart高阶函数

问题描述 投票:0回答:1

我正在尝试创建一个简单的debug / print函数,在处理Dart中的Future结果时,我可以通过它通过then序列进行管道传输。

我的函数定义如下:

import 'dart:async';

typedef FutureOr<T> Pipe<T>(T pipeThrough);
Pipe<A> debug<A>(String log) {
  return (A pipeThrough) {
    print(log);
    return pipeThrough;
  };
}

它将返回一个函数,该函数将通过管道从Future链接收到的内容进行管道传输,并且在此之前,它将打印已发送到debug的消息log。”>

我使用该函数的方式非常简单:

Future<Map> load(String folder) {
  return File(Paths.of([folder, 'data.json']))
      .readAsString()
      .then((s) => jsonDecode(s))
      .then(debug<Map>('JSON LOADED!'));
}

正如您在将来的链中的最后一个then

中所看到的,它应该返回链中的所有内容,但要在此之前打印'JS​​ON LOADED!'

但是使用泛型和Future api时,我没有设法找到一种使之起作用的方法,这是错误:

Unhandled exception:
type '(Map<dynamic, dynamic>) => Map<dynamic, dynamic>' is not a subtype of type '(dynamic) => FutureOr<Map<dynamic, dynamic>>'
#0      load (file:///{.../..../......}/data/data_json.dart:11:13)
#1      main (file:///{.../..../......}/data/main.dart:7:28)
#2      _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:301:19)
#3      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)

我已经尝试了很多不同的方法,但是从根本上我不知道发生了什么,飞镖是否不会根据泛型类型注释来推断适当的类型?

我正在尝试创建一个简单的调试/打印功能,在处理Dart中的Future结果时,我可以通过它依次进行一系列操作。我的函数定义如下:import'dart:async'; ...

dart future
1个回答
0
投票

我不知道为什么

© www.soinside.com 2019 - 2024. All rights reserved.