【前端开发】JS同步与异步调用

一、JS同步与异步调用
同步调用是指代码按照其编写的顺序执行,每个函数都必须等待前一个函数完成后才能执行。这种调用方式会阻塞代码的执行,直到当前函数执行完成才能执行下一个函数。
正常的直接代码写下来调用就是同步调用。

异步调用是指代码不按照其编写的顺序执行,而是在某些操作完成后再执行。例如,当我们使用 Ajax 请求数据时,我们可以在请求发送后继续执行代码,而不必等待请求完成。 异步调用不会阻塞代码的执行,可以在后台执行其他操作。

1、异步调用函数:使用回调函数实现异步调用

function asyncFunction(callback) {
  console.log("Start");
  setTimeout(function() {
    console.log("End");
    callback();
  }, 2000);
}

console.log("Before function call");
asyncFunction(function() {
  console.log("Callback");
});
console.log("After function call");

 


在这个例子中,我们定义了一个 asyncFunction 函数,它使用 setTimeout 函数模拟了一个异步操作,并在操作完成后调用了回调函数。在主程序中,我们先输出 “Before function call”,然后调用 asyncFunction 函数,并传入一个回调函数。由于 asyncFunction 是异步调用,因此代码不会等待操作完成,而是直接执行后面的代码。因此,输出的顺序为 “Before function call”、“Start”、“After function call”、2 秒后输出 “End”、“Callback”。

2、使用 Promise 实现异步调用:

function asyncFunction() {
  console.log("Start");
  return new Promise(function(resolve, reject) {
    setTimeout(function() {
      console.log("End");
      resolve();
    }, 2000);
  });
}

console.log("Before function call");
asyncFunction().then(function() {
  console.log("Promise resolved");
});
console.log("After function call");

 

在这个例子中,我们定义了一个 asyncFunction 函数,它返回一个 Promise 对象,并在异步操作完成后调用 resolve 函数。在主程序中,我们先输出 “Before function call”,然后调用 asyncFunction 函数,并使用 then 方法注册一个回调函数。由于 asyncFunction 是异步调用,因此代码不会等待操作完成,而是直接执行后面的代码。因此,输出的顺序为 “Before function call”、“Start”、“After function call”、2 秒后输出 “End”、“Promise resolved”。

3、使用 async/await 实现异步调用:

async function asyncFunction() {
  console.log("Start");
  await new Promise(function(resolve, reject) {
    setTimeout(function() {
      console.log("End");
      resolve();
    }, 2000);
  });
}

console.log("Before function call");
asyncFunction().then(function() {
  console.log("Promise resolved");
});
console.log("After function call");

 


在这个例子中,我们定义了一个 asyncFunction 函数,它使用 await 关键字等待异步操作完成,并在操作完成后继续执行。在主程序中,我们先输出 “Before function call”,然后调用 asyncFunction 函数,并使用 then 方法注册一个回调函数。由于 asyncFunction 是异步调用,因此代码不会等待操作完成,而是直接执行后面的代码。因此,输出的顺序为 “Before function call”、“Start”、“After function call”、2 秒后输出 “End”、“Promise resolved”。


原文链接:https://blog.csdn.net/qq_33957603/article/details/133212759

posted @ 2024-03-12 10:28  一心二念  阅读(1374)  评论(1编辑  收藏  举报