在dart中使用async/wait不与http包一起等待

在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

我已经阅读了之前发布的与此主题相关的问题,但无法理解发生了什么。我想我已经完成了与官方飞镖视频中所解释的完全相同的过程-

我想做的很简单。我想进行API调用,需要等待,直到得到响应。但我看不出它能不能正常工作。也许我对异步/等待的理解是错误的。如果我检查控制台输出,我会得到这样的结果

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返回未来的结果。有时你可能希望同时进行多个期货交易,这样就方便了。。。