等待异步完成

时间:2018-05-07 19:52:10

标签: dart flutter

我目前有类似的东西

   Future<bool>  checkAvailability(String email) async {
        var client = new http.Client();
        var response = await client.get(host);
        bool result;
        if (response.statusCode == 404) {
             result= true;
        }
        else if (response.statusCode == 200) {
              result= false;
        }
        client.close();
        return result;
    }

我从常规的非aysnc函数调用上述方法 以这种方式

void test() {
    checkAvailability(email).then((result){....}
       );
}

上面代码的问题在于它的异步。根据我的理解,一旦checkAvailability被称为在不同的线程中启动它?并且ui(主要)线程继续?我对么?

我想做的是让test函数等待checkAvailability的结果。我知道我可以使用await但是方法test需要标记为async,并且当调用此方法时,它将在不同的线程中启动。我想要的是checkAvailability的呼叫是同步的,我不介意等待回复。

1 个答案:

答案 0 :(得分:2)

  

一旦调用了checkAvailability,它就会在另一个线程中启动吗?

异步执行与线程无关,异步与事件队列https://webdev.dartlang.org/articles/performance/event-loop

一起使用
  

test需要标记为async,当调用此方法时,它将在不同的帖子中启动。

如前所述,它不会是另一个线程。在async方法上使用test通常可以正常工作。你为什么试图避免它?

  

我想要的是对checkAvailability的调用是同步的,我不介意等待响应。

如果您不关心结果,请不要等待它,尽管这也会导致调用代码在checkAvailability完成之前继续。

  

我想要的是对checkAvailability的调用是同步的,我不介意等待响应。

无法从异步执行返回到同步执行。一旦进行异步调用,它就会完成,结果将始终为Future,需要等待.then(...)进行处理。

如果您在checkAvailability完成时并不关心并且不需要来自异步调用的结果,则您不需要await或使用then(...)。只需调用方法即可。