interview
frontend-classic
什么是 ES6 中的 Promise它的使用场景有哪些

前端经典面试题合集, 什么是 ES6 中的 Promise?它的使用场景有哪些?

前端经典面试题合集, 什么是 ES6 中的 Promise?它的使用场景有哪些?

QA

Step 1

Q:: 什么是 ES6 中的 Promise?

A:: Promise 是 ES6 引入的一种用于处理异步操作的对象。它表示一个异步操作的最终完成(或失败)及其结果值。Promise 有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。一个 Promise 对象代表一个异步操作,有三种状态:Pending(进行中),Fulfilled(已成功)和 Rejected(已失败)。Promise 提供了 then 和 catch 方法用于处理异步操作的成功和失败回调。

Step 2

Q:: Promise 的使用场景有哪些?

A:: Promise 通常用于处理异步操作,如网络请求(AJAX 请求),定时器(setTimeout),文件操作,数据库查询等。它可以帮助我们避免回调地狱(Callback Hell),使代码更易于阅读和维护。

Step 3

Q:: Promise 的基本用法是什么?

A:: Promise 的基本用法包括创建 Promise 对象、在 Promise 内部进行异步操作、使用 then 方法处理成功结果、使用 catch 方法处理错误。示例代码如下:

 
const promise = new Promise((resolve, reject) => {
  // 异步操作
  if (成功) {
    resolve(结果);
  } else {
    reject(错误);
  }
});
 
promise.then(result => {
  console.log(result);
}).catch(error => {
  console.error(error);
});
 

Step 4

Q:: 如何使用 Promise.all?

A:: Promise.all 接受一个 Promise 数组,返回一个新的 Promise。当所有 Promise 都成功时,新的 Promise 变为 Fulfilled 状态,并返回所有结果组成的数组;如果其中一个 Promise 失败,新的 Promise 变为 Rejected 状态,并返回失败的原因。示例代码如下:

 
const promise1 = Promise.resolve(1);
const promise2 = Promise.resolve(2);
const promise3 = Promise.resolve(3);
 
Promise.all([promise1, promise2, promise3]).then(values => {
  console.log(values); // [1, 2, 3]
}).catch(error => {
  console.error(error);
});
 

Step 5

Q:: 如何使用 Promise.race?

A:: Promise.race 接受一个 Promise 数组,返回一个新的 Promise。当第一个 Promise 完成(无论是成功还是失败)时,新的 Promise 就会采用该 Promise 的状态和结果。示例代码如下:

 
const promise1 = new Promise((resolve, reject) => {
  setTimeout(resolve, 500, 'one');
});
const promise2 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'two');
});
 
Promise.race([promise1, promise2]).then(value => {
  console.log(value); // 'two'
}).catch(error => {
  console.error(error);
});
 

用途

面试中询问 Promise 相关问题可以考察候选人对 JavaScript 异步编程的理解和掌握程度。在实际生产环境中,Promise 广泛应用于网络请求、文件操作、数据库操作等涉及异步处理的场景。通过使用 Promise,可以更优雅地处理异步操作,避免回调地狱,提高代码的可读性和维护性。\n

相关问题

🦆
什么是 asyncawait?

async/await 是基于 Promise 的语法糖,允许我们以同步的方式编写异步代码。async 用于声明一个异步函数,await 用于等待一个 Promise 完成。示例代码如下:

 
async function fetchData() {
  try {
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
    console.log(data);
  } catch (error) {
    console.error(error);
  }
}
fetchData();
 
🦆
Promise 和回调函数的区别是什么?

回调函数和 Promise 都用于处理异步操作,但回调函数会导致回调地狱,代码难以维护。Promise 通过 then 和 catch 方法链式调用,使异步代码更加直观和可读。

🦆
Promise.reject 和 Promise.resolve 有什么区别?

Promise.resolve(value) 返回一个状态为 fulfilled 的 Promise 对象,值为 value;Promise.reject(reason) 返回一个状态为 rejected 的 Promise 对象,原因为 reason。

🦆
如何捕获 Promise 链中的错误?

可以使用 catch 方法捕获 Promise 链中的错误,也可以在链的最后添加一个 catch 方法。示例代码如下:

 
promise
  .then(result => {
    // 处理结果
  })
  .catch(error => {
    console.error(error);
  });