interview
advanced-javascript-frontend
await 到底在等待什么

前端 JavaScript 进阶面试题, await 到底在等待什么?

前端 JavaScript 进阶面试题, await 到底在等待什么?

QA

Step 1

Q:: await 到底在等待什么?

A:: await 关键字用于等待一个 Promise 对象的完成,并获取其解析值。如果传递给 await 的表达式不是一个 Promise 对象,它会被转换成一个已经解析的 Promise,然后继续等待。

Step 2

Q:: 什么是 Promise?

A:: Promise 是一个表示异步操作最终完成或失败的对象。它有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。Promise 提供了一种更优雅的方式来处理异步操作。

Step 3

Q:: 如何处理多个 Promise?

A:: 可以使用 Promise.all() 或 Promise.race() 来处理多个 Promise。Promise.all() 等待所有 Promise 都完成,并返回一个包含所有结果的数组。Promise.race() 返回最先完成的 Promise 的结果,无论是成功还是失败。

Step 4

Q:: async 函数的作用是什么?

A:: async 函数是一个异步函数,它会隐式地返回一个 Promise。可以在 async 函数内部使用 await 关键字来暂停代码执行,直到 Promise 完成。

Step 5

Q:: 如何处理 await 中的错误?

A:: 可以使用 try...catch 语句来捕获和处理 await 表达式中的错误。例如:

 
async function fetchData() {
  try {
    let response = await fetch('url');
    let data = await response.json();
    return data;
  } catch (error) {
    console.error('Error:', error);
  }
}
 

用途

面试这些内容是为了评估候选人对 JavaScript 异步编程的理解和掌握情况。在实际生产环境中,异步编程用于处理诸如网络请求、文件读取、定时器等需要等待的操作,从而提高应用的响应速度和性能。\n

相关问题

🦆
事件循环是什么?

事件循环是 JavaScript 的一种机制,用于处理异步操作。它会不断地从任务队列中取出任务并执行,确保非阻塞式的单线程运行环境。

🦆
什么是回调函数?

回调函数是作为参数传递给另一个函数,并在某个特定事件发生后被调用的函数。回调函数通常用于处理异步操作。

🦆
Promise 和回调函数的区别?

回调函数是在异步操作完成后被调用的函数,容易产生回调地狱(callback hell)。Promise 通过链式调用(.then()、.catch())使异步代码更加可读,避免回调地狱问题。

🦆
什么是微任务和宏任务?

微任务(microtask)和宏任务(macrotask)是事件循环中任务队列的两种类型。微任务包括 Promise 回调、MutationObserver 回调等。宏任务包括 setTimeout、setInterval、I/O 操作等。微任务队列优先于宏任务队列。