2017-04-12 62 views
5

我有一個特殊的情況,我需要等待 繼續之前的異步調用結果。我正在使用async/await關鍵字,但沒有任何運氣。 任何幫助表示讚賞。javascript異步/等待不工作

這是我試圖讓它工作,數字應該按數字順序。

function sleep(ms) { 
 
    return new Promise(resolve => setTimeout(resolve, ms)); 
 
} 
 

 
async function demo() { 
 
    document.writeln('2...'); 
 
    await sleep(2000); 
 
    document.writeln('3...'); 
 
} 
 

 
document.writeln('1...'); 
 
demo(); 
 
document.writeln('4.');

+3

到底爲什麼你覺得他們應該是按數字順序排列? '3'是最後一個,因爲這是在Promise函數之後執行的最後一件事。你期望'1 ... 2 ... 3 ... 4'在最後顯示嗎?那麼不要使用'document.writeln'。改用標準的DOM API。 – Xufox

回答

1

你應該async function後使用.then()

function sleep(ms) { 
 
    return new Promise(resolve => setTimeout(resolve, ms)); 
 
} 
 

 
async function demo() { 
 
    document.writeln('2...'); 
 
    await sleep(2000); 
 
    document.writeln('3...'); 
 
} 
 

 
document.writeln('1...'); 
 
demo().then(() => { 
 
    document.writeln('4.'); 
 
});

3

異步函數會返回一個Promise,所以你需要等待調用demo

const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms)) 

const demo = async() => { 
    console.log('2...') 
    await sleep(2000) 
    console.log('3...') 
} 

const blah = async() => { 
    console.log('1...') 
    await demo() 
    console.log('4.') 
} 

blah()