2017-04-12 59 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()