Javascript 为什么async之后的语句在使用async函数的语句之前执行?

Javascript 为什么async之后的语句在使用async函数的语句之前执行?,javascript,ecmascript-6,async-await,Javascript,Ecmascript 6,Async Await,我不熟悉异步/等待。我希望上述代码的结果是 function renderLoader() { console.log("Loading"); } function getResults() { setTimeout(myTimeout, 3000) } function myTimeout() { console.log("The Results"); } function clearLoader() { console.log("Loading ove

我不熟悉异步/等待。我希望上述代码的结果是

function renderLoader() {
    console.log("Loading");
}

function getResults() {
    setTimeout(myTimeout, 3000)
}  

function myTimeout() {
    console.log("The Results");
}

function clearLoader() {
   console.log("Loading over");
}

const controlSearch = async () => {
    renderLoader();
    await getResults();
    clearLoader();
}

controlSearch();
但是它却产生了这个,

Loading  //then wait for 3 seconds
Results
Loading over
我不明白我做错了什么?

等待/异步播放承诺。照原样,getResults同步返回未定义的,而它应该返回一个承诺,wait will,嗯,wait:

函数getResults{ 返回新PromiseSolve=>{ 设置超时=>{ 我的超时; 决定 }, 3000 }; } 或:

函数getResults{ 返回新PromiseSolve=>{ setTimeoutresolve,3000 }.然后我超时; }
请参阅。

getResults不返回PromiseI已阅读的文档。我的理解是,即使我没有明确提到回报,承诺也会得到回报。现在,我知道它是“未定义的”。
Loading
Loading over //then wait for 3 secs
Results