什么是异步,同步,setTimeout,Promise,async

异步(Asynchronous)和同步(Synchronous)是关于代码执行顺序的概念。

同步是指代码按照顺序一行一行地执行,每一行代码执行完后才会执行下一行代码。同步代码的执行是阻塞的,即只有当前代码执行完成后,才能执行下一行代码。

异步是指代码不按照顺序执行,而是先执行后面的代码,同时继续执行当前代码后面的代码。异步代码的执行是非阻塞的,即不需要等待当前代码执行完成,就可以继续执行后面的代码。

setTimeout是JavaScript中提供的一个函数,可以在指定的时间后执行一个回调函数。它是一种异步操作,即代码会继续执行下去,不会等待setTimeout中的时间到期。

Promise是JavaScript中的一个对象,用来表示一个延迟完成的操作。它可以用来处理异步操作,通过它可以更好地管理和控制异步代码。Promise支持链式调用,可以使用then方法来处理操作成功的情况,使用catch方法来处理操作失败的情况。

async/await是ES2017中引入的语法糖,用于简化Promise的使用。通过async关键字来定义一个异步函数,使用await关键字来等待一个Promise对象的完成,并将结果赋值给一个变量。在async函数中,可以像编写同步代码一样处理异步操作。

举例说明:

1. 同步代码的例子:

console.log("Start");
console.log("Hello");
console.log("End");
// Output:
// Start
// Hello
// End

这段代码按照顺序执行,输出结果为"Start"、"Hello"、"End"。

2. 异步代码的例子:

console.log("Start");
setTimeout(() => {
  console.log("Hello");
}, 2000);
console.log("End");
// Output:
// Start
// End
// Hello (after 2 seconds)

这段代码中,setTimeout是一个异步操作,代码会继续往下执行,不会等待2秒钟,所以先输出"Start",然后输出"End"。当2秒钟过去后,才会执行setTimeout中的回调函数,输出"Hello"。

3. Promise的例子:

function fetchData() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("Data fetched successfully");
    }, 2000);
  });
}

fetchData().then(data => {
  console.log(data);
}).catch(error => {
  console.log(error);
});
// Output (after 2 seconds):
// Data fetched successfully

这段代码中,fetchData函数返回一个Promise对象,表示一个异步操作。在Promise对象的回调函数中,使用setTimeout模拟异步操作,2秒钟后调用resolve方法,表示操作成功,并传递数据给then方法。在then方法中,打印出数据。如果操作失败,则会调用reject方法,然后在catch方法中处理错误。

4. async/await的例子:

function fetchData() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("Data fetched successfully");
    }, 2000);
  });
}

async function getData() {
  try {
    const data = await fetchData();
    console.log(data);
  } catch (error) {
    console.log(error);
  }
}

getData();
// Output (after 2 seconds):
// Data fetched successfully

这段代码中,getData函数被定义为异步函数,通过await关键字等待fetchData函数返回的Promise对象的完成。在try块中,打印出数据。如果操作失败,会抛出一个错误,然后在catch块中处理错误。

综上所述,同步代码按顺序一行一行执行,异步代码不按顺序执行并且不会阻塞后面的代码执行。setTimeout用于延迟执行代码,Promise用于处理异步操作,async/await用于更方便地编写异步代码。
 

猜你喜欢

转载自blog.csdn.net/weixin_39273589/article/details/132604720