📜  等待异步睡眠 - Javascript (1)

📅  最后修改于: 2023-12-03 15:11:32.036000             🧑  作者: Mango

等待异步睡眠 - Javascript

在JavaScript中,异步操作是很常见的。当函数需要执行一些长时间运行的操作时,如访问数据库或网络请求,通常会使用异步操作来避免阻塞主线程。

但有时候,我们需要在异步操作完成之前暂停一段时间。这时就需要等待异步睡眠。

Promise 和 Async/Await

在ES6中,引入了Promise来优雅地管理异步操作,并且在ES8中又引入了Async/Await来更方便地编写异步代码。

Promise

一个Promise对象通常有三个状态:pending、resolved和rejected。

当一个异步操作完成时,Promise对象就会从pending变成resolved状态,并返回执行结果;如果异步操作出错,则Promise对象会从pending变成rejected状态,并返回错误信息。

以下是一个使用Promise的例子:

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

console.log('start');

sleep(2000).then(() => {
  console.log('end');
});

这里定义了一个sleep函数,它会等待指定毫秒数后,返回一个resolved状态的Promise对象。在调用sleep函数后立即输出‘start’,然后在2秒后输出‘end’。

Async/Await

Async/Await是Promise语法的一种封装,它使异步代码看起来像同步代码。在使用Async/Await时,我们可以使用await关键字来等待异步操作完成。

以下是使用Async/Await的上述例子:

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

async function main() {
  console.log('start');
  await sleep(2000);
  console.log('end');
}

main();

这里定义了一个Async函数sleep,它等待指定毫秒数后返回。在Async函数main中,我们使用await关键字来等待sleep函数完成。

等待结果

通过等待Promise对象或异步函数的返回结果,我们可以实现异步睡眠。以下是一个等待Promise对象结果的例子:

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

async function main() {
  console.log('start');
  await sleep(2000);
  console.log('end');
}

main();

这里的sleep函数返回一个Promise对象,实现了异步睡眠。在main函数中,我们使用await关键字等待sleep的返回结果,使代码暂停了2秒钟。

总结

等待异步睡眠是JavaScript开发中经常使用的技巧。通过使用Promises和Async/Await,我们可以很容易地实现异步睡眠,并使代码更易于理解。