interview
advanced-javascript-frontend
Promise 有哪些基本用法

前端 JavaScript 进阶面试题, Promise 有哪些基本用法?

前端 JavaScript 进阶面试题, Promise 有哪些基本用法?

QA

Step 1

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

A:: Promise 是 JavaScript 中用于处理异步操作的一种方式。基本用法包括创建一个 Promise,使用 .then() 方法处理成功的结果,使用 .catch() 方法处理错误。Promise 的状态可以是 pending(进行中)、fulfilled(已成功)或 rejected(已失败)。

Step 2

Q:: 如何创建一个新的 Promise?

A:: 可以使用 Promise 构造函数创建一个新的 Promise,例如:

 
const promise = new Promise((resolve, reject) => {
  // 异步操作
  if (操作成功) {
    resolve(value);
  } else {
    reject(error);
  }
});
 

Step 3

Q:: Promise.then() 方法的作用是什么?

A:: Promise.then() 方法用于在 Promise 状态变为 fulfilled 后执行一个函数,并接收该函数的返回值。它会返回一个新的 Promise,使得可以进行链式调用。例如:

 
promise.then(value => {
  console.log(value);
}).catch(error => {
  console.error(error);
});
 

Step 4

Q:: Promise.catch() 方法的作用是什么?

A:: Promise.catch() 方法用于处理 Promise 被 reject 的情况。它相当于 .then(null, rejection) 方法。例如:

 
promise.catch(error => {
  console.error(error);
});
 

Step 5

Q:: Promise.finally() 方法的作用是什么?

A:: Promise.finally() 方法用于在 Promise 结束时,无论结果是 fulfilled 还是 rejected,都会执行一个回调函数。例如:

 
promise.finally(() => {
  console.log('Promise 已结束');
});
 

Step 6

Q:: 如何使用 Promise.all()

A:: Promise.all() 方法接收一个 Promise 对象的可迭代对象(例如数组),并返回一个新的 Promise,只有当所有输入的 Promise 都已完成(fulfilled 或 rejected)时,才会进行 resolve 或 reject。例如:

 
Promise.all([promise1, promise2]).then(values => {
  console.log(values);
}).catch(error => {
  console.error(error);
});
 

Step 7

Q:: 如何使用 Promise.race()

A:: Promise.race() 方法同样接收一个 Promise 对象的可迭代对象,并返回一个新的 Promise。当其中的一个 Promise 解决或拒绝时,返回的 Promise 就会解决或拒绝。例如:

 
Promise.race([promise1, promise2]).then(value => {
  console.log(value);
}).catch(error => {
  console.error(error);
});
 

用途

面试关于 Promise 的问题是为了评估候选人对异步编程的理解和掌握。在实际生产环境中,Promise 被广泛用于处理异步操作,例如网络请求、定时任务和文件读写等。掌握 Promise 的使用可以帮助开发人员编写更简洁、更易维护的异步代码。\n

相关问题

🦆
什么是 asyncawait?

async/await 是 ES2017 引入的用于处理异步操作的语法糖。它使得异步代码看起来像同步代码,极大地简化了 Promise 的使用。async 函数会返回一个 Promise,await 表达式会暂停 async 函数的执行,等待 Promise 解决后再继续执行。例如:

 
async function fetchData() {
  try {
    let response = await fetch('https://api.example.com/data');
    let data = await response.json();
    console.log(data);
  } catch (error) {
    console.error(error);
  }
}
 
🦆
如何处理多个异步操作?

可以使用 Promise.all() 或 Promise.race() 方法来处理多个异步操作。Promise.all() 用于等待所有操作完成,而 Promise.race() 用于返回第一个完成的操作。例如:

 
Promise.all([fetch(url1), fetch(url2)]).then(responses => {
  return Promise.all(responses.map(response => response.json()));
}).then(data => {
  console.log(data);
});
 
🦆
如何在异步操作中处理错误?

可以使用 .catch() 方法来处理 Promise 中的错误,或者在 async 函数中使用 try...catch 块。例如:

 
fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));
 
async function fetchData() {
  try {
    let response = await fetch('https://api.example.com/data');
    let data = await response.json();
    console.log(data);
  } catch (error) {
    console.error('Error:', error);
  }
}
 
🦆
解释一下 Promise 的状态转移?

Promise 具有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。初始状态是 pending,可以通过调用 resolve() 将状态转为 fulfilled,或者调用 reject() 将状态转为 rejected。一旦状态转为 fulfilled 或 rejected,就不会再改变。

🦆
如何进行 Promise 链式调用?

可以通过在 .then() 方法中返回一个新的 Promise 或值来实现链式调用。每个 .then() 方法会返回一个新的 Promise,使得可以继续调用下一个 .then() 方法。例如:

 
fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => {
    console.log(data);
    return fetch('https://api.example.com/other-data');
  })
  .then(response => response.json())
  .then(otherData => console.log(otherData))
  .catch(error => console.error('Error:', error));