颤振-如何在非高阶函数上使用计算?



我在使用计算功能时有问题。我有一个像下面这样的高阶函数;

Future<DistrictTimeData> getDistrictTimeData(String path) async {
Uri url = Uri.parse(ApiConstants.instance.baseUrl + "/$path");
var res = await http.get(url);
if (res.statusCode != 200) throw Exception('Bir hata oluştu.');

return DistrictTimeData.fromJson(jsonDecode(res.body));
}

我能够像这样在计算机中工作这个函数;

@override
void init() async{
changeLoading();
districtTimeData=await compute(NetworkManager.instance!.getDistrictTimeData,path);
changeLoading();
}

问题从下面的函数开始,它不是一个高阶函数;

Future<List> getTimeZones() async {
Uri url = Uri.parse(ApiConstants.instance.baseUrl);
var res = await http.get(url);
if (res.statusCode != 200) throw Exception('Bir hata oluştu.');
return jsonDecode(res.body);
}

当我试图计算这个函数时,它除了一个参数之外,这个参数应该是我试图计算的函数的参数。这个函数没有这样的参数因为它不是一个高阶函数。我的问题是如何计算非高阶函数?提前谢谢。

最好不要使用像(_) => getTimeZones这样的闭包,正如compute文档中所解释的那样:

使用闭包必须小心。由于dart-lang/sdk#36983的规定,闭包可能会捕获一些对象,这些对象虽然没有直接在闭包本身中使用,但可能会阻止它被发送到隔离对象。

相反,可以使用一个简单的包装函数:
Future<List> computeTimeZones(void _) => getTimeZones();

最新更新