title: Coroutines how to wait for the data and then continue process
body: <p>I'm learning coroutines with kotlin, and I have problem how process can wait until process 1 finished then it continue to process 2, from my sample below I have object Network which access API server using getNews(it's running well and get the data)
  I called this getNews from refreshNews using asynch - await, with the purpose it wait for the data then it continue running, but "The program Not Wait", it just running process 2 then process 1 finish, so I cannot capture data from API in refresh news</p>
  
  <pre><code>// process 1 - calling api this running well can get the data see process 2
  
  object Network {
      var status : NewsApiStatus =  NewsApiStatus.LOADING
  
      private var viewModelJob = Job()
      private val coroutineScope = CoroutineScope(viewModelJob + Dispatchers.Main)
  
      fun getNews(filter: String, page: Int =1) : newsData? {
          var allNews : newsData? = null
          coroutineScope.launch {
              RetrofitClient.instance.getAllNews(filter, page).enqueue(object: Callback&lt;newsData&gt;{
                  override fun onFailure(call: Call&lt;newsData&gt;, t: Throwable) {
                      status = NewsApiStatus.ERROR
                  }
  
                  override fun onResponse(
                      call: Call&lt;newsData&gt;,
                      response: Response&lt;newsData&gt;
                  ) {
                      status = NewsApiStatus.DONE
                      var listResult = response.body()
                      if (listResult != null) {
                          if (listResult.data.isNotEmpty())  {
                              allNews = listResult
                              Timber.tag(TAG).i( "process 1 total allNews = ${allNews!!.data.size}")
                          }
                      }
                  }
              })
          }
          return(allNews)
      }
  }
  
  // process 2 - calling process 1 with runBlocking
  
  fun refreshNews() = runBlocking{
      val newsData = async {
          Network.getNews("")
      }
      Timber.tag(TAG).i("proses 2 ${newsData.await()?.data?.size}")
      // here I want newsData to wait until it has data
  }
  
  // this main program that call process 2
  
  class NewsListViewModel(application: Application) : AndroidViewModel(application) {
      init {
          refreshNews()
      }
  }
  </code></pre>