Firestore、Flutter、Async:方法不等待异步方法完成
2021-03-31
670
我正在构建一个 Flutter 应用,该应用使用 API 来获取加密货币价格。我将 API 密钥存储在 Firestore 数据库中,目前我可以从 Firestore 检索 API 密钥以在我的应用中使用。我遇到的问题是,当运行
buildURL()
时,它不会等待
String apiKey = await getApiKey();
完全完成就继续,导致
apiKey
从
buildURL()
打印为 Null。
我在
getApiKey()
和
buildURL()
内添加了打印语句来跟踪
apiKey
的值,似乎
buildURL()
中的打印语句在
getApiKey()
中的打印语句之前运行。
I/flutter ( 2810): Api Key from buildURL():
I/flutter ( 2810): null
I/flutter ( 2810): Api Key from getApiKey():
I/flutter ( 2810): 123456789
import 'package:cloud_firestore/cloud_firestore.dart';
class URLBuilder {
URLBuilder(this.cryptoCurrency, this.currency, this.periodValue);
String cryptoCurrency;
String currency;
String periodValue;
String _pricesAndTimesURL;
String get pricesAndTimesURL => _pricesAndTimesURL;
getApiKey() {
FirebaseFirestore.instance
.collection("myCollection")
.doc("myDocument")
.get()
.then((value) {
print("Api Key from getApiKey():");
print(value.data()["Key"]);
return value.data()["Key"];
});
}
buildURL() async {
String apiKey = await getApiKey();
_pricesAndTimesURL =
'XXXXX/XXXXX/$cryptoCurrency$currency/ohlc?periods=$periodValue&apikey=$apiKey';
print("Api Key from buildURL():");
print(apiKey);
}
}
3个回答
您未从 getApiKey 函数返回
getApiKey() {
return FirebaseFirestore.instance
.collection("myCollection")
.doc("myDocument")
.get()
.then((value) {
print("Api Key from getApiKey():");
print(value.data()["Key"]);
return value.data()["Key"];
});
}
Rishi Saraf
2021-03-31
你介意尝试一下吗
Future<String> getApiKey() async {
String result=await FirebaseFirestore.instance
.collection("myCollection")
.doc("myDocument")
.get()
.then((value) {
print("Api Key from getApiKey():");
print(value.data()["Key"]);
return value.data()["Key"];
});
return result;
}
Sam Chan
2021-03-31
为了等待函数,它需要是一个异步函数。
需要将
async
和
await
添加到
getApiKey()
才能等待该函数。
Future<String> getApiKey() async {
var result = await FirebaseFirestore.instance
.collection("myCollection")
.doc("myDocument")
.get();
return result.data()["Key"]
}
Shannon
2021-03-31