javascript异步/等待无法正常工作

时间:2017-04-12 03:04:09

标签: javascript async-await

我有一个特定的情况,我需要等待之前的异步调用结果 持续。我使用async / await关键字,但没有运气。 任何帮助表示赞赏。

这是我试图让它发挥作用的尝试,数字应按数字顺序排列。

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 个答案:

答案 0 :(得分:10)

异步函数将返回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()

答案 1 :(得分:6)

您应该在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.');
});




答案 2 :(得分:-1)

这是我认为发生的事情。在异步功能之外,还有一些不当行为,因此最好将其全部放入异步功能中,然后像这样调用它。

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

async function demo() {
  console.log('1...');
  console.log('2...');
  await sleep(2000);
  console.log('3...');
  console.log('4...');

}
demo();