【问题标题】:How do you get the value of an async operation inside a non-async function?如何在非异步函数中获取异步操作的值?
【发布时间】:2020-07-18 21:53:54
【问题描述】:

所以我有这个显示股票价格的小部件。我使用 HTTP 调用来获取股票价格,当然这个函数是异步的,在正文中我等待网络服务完成,然后返回股票价格。但是,每次我尝试打印此 stockPrice 时,它​​都会说这是一个未来,但我不知道如何打开它?我已经在我的网络调用中等待,所以不应该打开它并给我背后的真正价值吗?

StockService stockService = new StockService();
           var stockPrice = stockService.getStockPriceBySymbol(symbols.elementAt(x));
           print(stockPrice);

网络服务:

Future<dynamic> getStockPriceBySymbol(String symbol) async {
    NetworkService networkService = NetworkService(
        '$alphaStockApiURL?function=GLOBAL_QUOTE&symbol=$symbol&apikey=$kAlphaStockAPIKey');

    var stockData = await networkService.getData();
    // print(stockData['Global Quote']['05. price']);
    return stockData['Global Quote']['05. price'];
  }

【问题讨论】:

  • getStockPriceBySymbol()也返回Future,所以你也需要await

标签: flutter asynchronous dart


【解决方案1】:

你需要一个 await stockService.getStockPriceBySymbol

var stockPrice = await stockService.getStockPriceBySymbol(symbols.elementAt(x));

或未来。那么

stockService.getStockPriceBySymbol(symbols.elementAt(x)).then((stockPrice){
  print(stockPrice);
)};

【讨论】:

  • 但是我不能在我的小部件中调用此代码,因为小部件不能是异步类型。我将我的代码移动到一个新的异步方法,但该方法不会创建另一个 Future 吗?我想我必须在这个方法中使用 future 以某种方式更新我的 UI
  • 是的,您可以创建另一个未来,您可以在 initstate 中调用它一次,或者每次构建小部件时......使用 futurebuilder()
猜你喜欢
  • 2020-10-25
  • 2020-03-09
  • 2021-04-18
  • 2023-03-16
  • 2022-11-16
  • 2021-08-13
  • 1970-01-01
  • 2021-01-29
  • 1970-01-01
相关资源
最近更新 更多