在dart中使用async/wait不与http包一起等待
我已经阅读了之前发布的与此主题相关的问题,但无法理解发生了什么。我想我已经完成了与官方飞镖视频中所解释的完全相同的过程- 我想做的很简单。我想进行API调用,需要等待,直到得到响应。但我看不出它能不能正常工作。也许我对异步/等待的理解是错误的。如果我检查控制台输出,我会得到这样的结果在dart中使用async/wait不与http包一起等待,dart,async-await,Dart,Async Await,我已经阅读了之前发布的与此主题相关的问题,但无法理解发生了什么。我想我已经完成了与官方飞镖视频中所解释的完全相同的过程- 我想做的很简单。我想进行API调用,需要等待,直到得到响应。但我看不出它能不能正常工作。也许我对异步/等待的理解是错误的。如果我检查控制台输出,我会得到这样的结果 Staring the Program Ending the Program Got the questions list [Instance of 'Question', Instance of 'Questio
Staring the Program
Ending the Program
Got the questions list
[Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question']
有人能帮我吗
import 'package:http/http.dart' as http;
import 'dart:convert';
void main() {
print('Staring the Program');
getQuestions();
print('Ending the Program');
}
void getQuestions() async {
QuizModel qm = QuizModel();
List<Question> questionsList = await qm.getQuestions();
print('Got the questions list');
print(questionsList);
}
class Question {
String question;
bool answer;
Question({this.question, this.answer});
}
class QuizModel {
var quizData;
Future<List<Question>> getQuestions() async {
NetworkHelper networkHelper =
NetworkHelper('https://opentdb.com/api.php?amount=10&type=boolean');
quizData = await networkHelper.getData();
final List<Question> questionsList = [];
for (final question in quizData['results']) {
bool answer;
question['correct_answer'] == 'True' ? answer = true : answer = false;
questionsList
.add(Question(question: question['question'], answer: answer));
}
return questionsList;
}
}
class NetworkHelper {
final String _url;
NetworkHelper(this._url);
Future<dynamic> getData() async {
http.Response response = await http.get(_url);
if (response.statusCode == 200) {
var jsonData = jsonDecode(response.body);
return jsonData;
} else {
print(response.statusCode);
}
}
}
import'package:http/http.dart'作为http;
导入“dart:convert”;
void main(){
打印(“启动程序”);
获取问题();
打印(“结束程序”);
}
void getQuestions()异步{
QuizModel qm=QuizModel();
列表问题列表=等待qm.getQuestions();
打印(“获得问题列表”);
打印(问题列表);
}
课堂提问{
字符串问题;
布尔回答;
问题({这个问题,这个答案});
}
类QuizModel{
var quizData;
Future getQuestions()异步{
网络助手网络助手=
网络助手('https://opentdb.com/api.php?amount=10&type=boolean');
quizData=wait networkHelper.getData();
最终列表问题列表=[];
对于(quizData[‘结果’]中的最后一个问题){
布尔回答;
问题['correct_answer']='True'?答案=True:答案=false;
问题列表
。加入(问题(问题:问题[‘问题’],答案:答案));
}
返回问题列表;
}
}
类NetworkHelper{
最终字符串url;
NetworkHelper(此.\u url);
Future getData()异步{
http.Response-Response=wait-http.get(_-url);
如果(response.statusCode==200){
var jsonData=jsonDecode(response.body);
返回jsonData;
}否则{
打印(响应状态码);
}
}
}
您正在打印问题列表实例。如果要打印问题项,则需要执行此操作
void getQuestions() async {
QuizModel qm = QuizModel();
List<Question> questionsList = await qm.getQuestions();
print('Got the questions list');
for(final question in questionsList){
print(question.question);
}
}
void getQuestions()异步{
QuizModel qm=QuizModel();
列表问题列表=等待qm.getQuestions();
打印(“获得问题列表”);
for(问题列表中的最后一个问题){
打印(问题.问题);
}
}
而不是
void getQuestions() async {
QuizModel qm = QuizModel();
List<Question> questionsList = await qm.getQuestions();
print('Got the questions list');
print(questionsList);
}
void getQuestions()异步{
QuizModel qm=QuizModel();
列表问题列表=等待qm.getQuestions();
打印(“获得问题列表”);
打印(问题列表);
}
您正在打印问题列表实例。如果要打印问题项,则需要执行此操作
void getQuestions() async {
QuizModel qm = QuizModel();
List<Question> questionsList = await qm.getQuestions();
print('Got the questions list');
for(final question in questionsList){
print(question.question);
}
}
void getQuestions()异步{
QuizModel qm=QuizModel();
列表问题列表=等待qm.getQuestions();
打印(“获得问题列表”);
for(问题列表中的最后一个问题){
打印(问题.问题);
}
}
而不是
void getQuestions() async {
QuizModel qm = QuizModel();
List<Question> questionsList = await qm.getQuestions();
print('Got the questions list');
print(questionsList);
}
void getQuestions()异步{
QuizModel qm=QuizModel();
列表问题列表=等待qm.getQuestions();
打印(“获得问题列表”);
打印(问题列表);
}
QuizModel.getQestions()是未来
您的程序正在打印开始、调用未来和打印结束。它不是等待未来,而是等待问题
您可以将async添加到main,并等待方法调用。
QuizModel.getQestions()
是未来的趋势
I/flutter (18222): Staring the Program
I/flutter (18222): Got the questions list
I/flutter (18222): [Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question']
I/flutter (18222): Ending the Program
您的程序正在打印开始、调用未来和打印结束。它不是等待未来,而是等待问题
您可以将async添加到main,并等待方法调用
I/flutter (18222): Staring the Program
I/flutter (18222): Got the questions list
I/flutter (18222): [Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question']
I/flutter (18222): Ending the Program
如果你需要这张照片,你必须把它换掉
void main() {
print('Staring the Program');
getQuestions();
print('Ending the Program');
}
void getQuestions() async {
QuizModel qm = QuizModel();
List<Question> questionsList = await qm.getQuestions();
print('Got the questions list');
print(questionsList);
}
void main(){
打印(“启动程序”);
获取问题();
打印(“结束程序”);
}
void getQuestions()异步{
QuizModel qm=QuizModel();
列表问题列表=等待qm.getQuestions();
打印(“获得问题列表”);
打印(问题列表);
}
用这个
void main()async {
print('Staring the Program');
await getQuestions();
print('Ending the Program');
}
Future<void> getQuestions() async {
QuizModel qm = QuizModel();
List<Question> questionsList = await qm.getQuestions();
print('Got the questions list');
print(questionsList);
}
void main()异步{
打印(“启动程序”);
等待回答问题();
打印(“结束程序”);
}
Future getQuestions()异步{
QuizModel qm=QuizModel();
列表问题列表=等待qm.getQuestions();
打印(“获得问题列表”);
打印(问题列表);
}
如果你需要这张照片,你必须把它换掉
void main() {
print('Staring the Program');
getQuestions();
print('Ending the Program');
}
void getQuestions() async {
QuizModel qm = QuizModel();
List<Question> questionsList = await qm.getQuestions();
print('Got the questions list');
print(questionsList);
}
void main(){
打印(“启动程序”);
获取问题();
打印(“结束程序”);
}
void getQuestions()异步{
QuizModel qm=QuizModel();
列表问题列表=等待qm.getQuestions();
打印(“获得问题列表”);
打印(问题列表);
}
用这个
void main()async {
print('Staring the Program');
await getQuestions();
print('Ending the Program');
}
Future<void> getQuestions() async {
QuizModel qm = QuizModel();
List<Question> questionsList = await qm.getQuestions();
print('Got the questions list');
print(questionsList);
}
void main()异步{
打印(“启动程序”);
等待回答问题();
打印(“结束程序”);
}
Future getQuestions()异步{
QuizModel qm=QuizModel();
列表问题列表=等待qm.getQuestions();
打印(“获得问题列表”);
打印(问题列表);
}
getQuestions上没有等待…getQuestions上没有等待…我只是打印它作为参考。我的问题是为什么结束节目
是在得到问题列表之前打印的
我只是打印它作为参考。我的问题是为什么结束节目
会在收到问题列表之前打印出来
谢谢。现在我想这很清楚了await
s作用域仅限于async
函数。是和否,如果没有await,它将返回未来本身,您可以传递未来并稍后等待。用wait返回未来的结果。有时,你可能希望同时进行多个期货交易,这样会很方便…谢谢。现在我想这很清楚了await
s作用域仅限于async
函数。是和否,如果没有await,它将返回未来本身,您可以传递未来并稍后等待。用wait返回未来的结果。有时你可能希望同时进行多个期货交易,这样就方便了。。。