在dart中从Future返回一个值

在dart中从Future返回一个值,dart,flutter,Dart,Flutter,我们可以从dart中的未来对象返回或获取值。通过阅读文档,我可以理解我们可以在Future类的then方法中传递函数,但我仍然不知道如何返回值 将以下内容视为伪代码 Int getTotalPay(){ Future<int> pension = getPensionFundAPI(); // a long running api call. don't wait here and call to next api int salary = getTotalSalary(); //w

我们可以从dart中的未来对象返回或获取值。通过阅读文档,我可以理解我们可以在Future类的then方法中传递函数,但我仍然不知道如何返回值

将以下内容视为伪代码

Int getTotalPay(){
Future<int> pension = getPensionFundAPI(); // a long running api call. don't wait here and call to next api
int salary = getTotalSalary();
//wait here till we get the int value received in Future when the above api call completes.
int result = salary + pension;
print(result);
Int getTotalPay(){
Future pension=getPensionFundAPI();//一个长时间运行的api调用。不要在这里等待并调用下一个api
int salary=getTotalSalary();
//在这里等待,直到我们将来在上述api调用完成时收到int值。
int结果=工资+养老金;
打印(结果);
返回结果; }

我知道我可以调用Future.com,然后在其中传递回调方法。但我的目的是在那之外返回结果。与我们在java和其他oops语言中所做的相同


在dart中可能吗?

不可能。就像把你80岁的自己带到这里,现在是不可能的:)


但是,您可以编写看起来可能的代码,但实际上是在不同时间运行单个函数的不同部分。为此,您需要了解

您可以使用
wait
,但您的方法需要
async
。 我想你的方法是这样的:

void main() async {
  int pension = await getPensionFundAPI(); // a long running api call. don't wait here and call to next api
  int salary = getTotalSalary();
  //wait here till we get the int value received in Future when the above api call completes.
  int result = salary + pension;
  print(result);
}

所以wait将阻止该方法,直到返回值为止。

使用
Future#然后使用
方法,如:
pension。然后((p)=>print($result:${salary+p}))基本上我想把值返回给调用函数。为了清晰起见,我编辑并重命名了main方法。因此,您必须返回一个
Future
,调用函数必须使用
then()
method,Future必须一直执行。奇怪。可能是真的为什么奇怪?如果将来可以完成某项任务,您就不能“现在”获取它-您必须将该
未来
传递给调用方,但我不想阻止执行。这就是为什么我认为我应该在这里使用未来的API,而不是等待。你可以在另一个方法中调用,异步方法不会阻止主线程,如果它在另一个线程中。我一直在使用等待异步,因为它的介绍。但问题是,我最终陷入了一个场景,我需要得到未来的价值。这在其他语言中是可能的。此外,还可以使用此功能实现上述功能。但不确切地说,哪种语言让你现在就知道未来的价值?正如你所评论的。在Java中,我们可以在第1行调用一个方法来获得未来。然后在接下来的10行中执行其他工作。然后在需要时打电话给Future.get。它将等待我们得到结果。但我们会有价值的。Dart
await
中是否可能出现类似的行为与Java的
.get()
完全相同,但必须使用
async
函数。你可以获得未来,做其他事情,当你想要价值时,你可以等待
.get()
实际上阻止了线程,并且故意不在Dart中,因为阻止UI线程会挂起应用程序。这是有道理的。谢谢