如何从我的异步函数返回一个值? [复制]

Posted

技术标签:

【中文标题】如何从我的异步函数返回一个值? [复制]【英文标题】:how do I return a value from my async function? [duplicate] 【发布时间】:2021-06-02 08:22:43 【问题描述】:

所以我有一个异步函数:

Future decodeToken() async 
  SharedPreferences prefs = await SharedPreferences.getInstance();
  var token = await prefs.getString('token');
  final Map<String, dynamic> payload = json.decode(
    ascii.decode(
      base64.decode(base64.normalize(token.split(".")[1])),
    ),
  );
  return payload;

当我尝试做的时候:

var payload = await decodeToken();

它抛出一个错误说“等待表达式只能在异步函数中使用。”

我尝试取出“await”并打印有效载荷变量,但显然它打印“Instance of Future”

如果我这样做:

decodeToken().then((value)=>print(value)) 

它正确打印了值,但我想在变量中使用它,如何返回异步函数的 vvalue?

【问题讨论】:

请不要编辑问题的答案。如果您有答案,请发布您自己问题的答案。由于您的问题已作为重复项关闭,如果您认为对未来用户有帮助,请添加对重复项的答案。 【参考方案1】:

定义返回类型为Future&lt;Map&lt;String, dynamic&gt;&gt;

Future<Map<String, dynamic>> decodeToken() async 
  SharedPreferences prefs = await SharedPreferences.getInstance();
  var token = await prefs.getString('token');
  final Map<String, dynamic> payload = json.decode(
    ascii.decode(
      base64.decode(base64.normalize(token.split(".")[1])),
    ),
  );
  return payload;


【讨论】:

【参考方案2】:

错误消息是说你只能在标记为async的方法中使用await,所以你从同步方法调用异步方法,而Dart不喜欢这样。

您有多种选择:

    使用Future...then 模式:
Map<String, dynamic> payload;
decodeToken().then((data) 
  payload = data;
);
    制作环绕方法async:
void foo() async 
  var payload = await decodeToken();

    使用FutureBuilder(如果您需要构建方法中的未来数据):
Widget build(BuildContext context) 
  return FutureBuilder(
    future: decodeToken(),
    builder: (context, snapshot) 
      if (!snapshot.hasData) 
        // Future hasn't completed yet, display something in the meantime
        return CircularProgressIndicator();
      
      // Future has completed, get data
      var payload = snapshot.data;
      ...
    ,
  );

【讨论】:

以上是关于如何从我的异步函数返回一个值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 promise 将数组从我的模块返回到我的 API?异步函数和承诺 - Node.js

如何修复返回“未定义”的异步函数?

如果我不关心它的返回值,我应该等待一个“异步任务”函数吗? [复制]

如何将包装在 Promise 中的值传递给非异步函数? [复制]

如何从我的 EC2 实例调用 AWS Lambda 函数?

node js - 当函数依赖于内部的异步函数时,如何从函数返回值