异步JavaScript | 豆包MarsCode AI刷题

62 阅读2分钟

异步JavaScript是指在JavaScript中执行一些操作时,不会阻塞(即“卡住”)主程序的执行。这种方式避免了等待过程中的“空闲时间”,提高了效率。

  • 在传统的同步编程中,代码是按顺序一行一行执行的,当执行一个耗时操作(比如读取文件、请求数据、等待用户输入等)时,程序会一直等待直到该操作完成,其他事情不能执行。
  • 但是在Web开发中,常常有一些耗时的操作(例如从服务器获取数据、加载大文件等),如果每次都等待操作完成再继续执行后续任务,程序就会变得很慢,甚至让用户体验不佳。

常见的异步JavaScript方式

1. 回调函数 (Callback Functions)

回调函数是最基本的异步机制,意味着在一个任务完成后,传递一个回调函数,在任务完成时调用这个函数。

console.log("开始请求数据");
fetchDataFromServer(function(data) {
    console.log("请求数据完成", data);  // 数据获取完成后执行回调函数
});
console.log("继续做其他事情");  // 这里不会被阻塞

fetchDataFromServer会在后台请求数据,并在数据返回时调用回调函数。程序继续执行,而不会等待数据返回。

2. Promises(承诺)

为了解决多个异步操作需要嵌套时的问题,引入了Promise。它表示一个异步操作的最终完成(或者失败),以及其结果值。

console.log("开始请求数据");
let promise = fetchDataFromServer();
promise.then(function(data) {
    console.log("请求数据完成", data);
}).catch(function(error) {
    console.log("请求失败", error);
});
console.log("继续做其他事情");

fetchDataFromServer返回一个Promise,表示异步操作的结果。如果数据获取成功,then回调会执行;如果失败,catch回调会执行。

3. Async/Await

AsyncAwait是基于Promise的语法糖,提供了更简洁和同步的方式来处理异步操作。

  • async:用于声明一个异步函数。
  • await:用于等待Promise的结果。
async function getData() {
    console.log("开始请求数据");
    try {
        let data = await fetchDataFromServer();  // 等待数据返回
        console.log("请求数据完成", data);
    } catch (error) {
        console.log("请求失败", error);
    }
    console.log("继续做其他事情");
}

getData();

await会等待fetchDataFromServer()返回的数据,然后继续执行后续代码。

异步编程的应用场景

  1. 网络请求:例如,向服务器请求数据,或者发送表单信息。由于网络请求可能会延迟,异步编程可以让浏览器在等待响应时执行其他操作,不会让整个页面“卡死”。
  2. 定时任务:比如定时刷新数据,或者延迟执行某些操作。
  3. 用户输入:比如表单验证、即时搜索等,当用户在输入时,应用可以异步处理数据并即时反馈结果。
  4. 文件操作:如读取大文件、上传文件等操作,由于这些操作会花费较多时间,使用异步可以避免卡住页面。