返回

Promise 超级实用宝典:难点题型攻克指南

前端

破题技巧,轻松驾驭 Promise 试题

Promise,作为 JavaScript 中的关键异步编程工具,在各种试题中扮演着重要角色。掌握 Promise 的特性和使用方法,是成功解题的关键。

难点一:Promise 状态凝固

Promise 的状态是不可逆的,一旦发生改变,便不会再变化。理解这一点,有助于解决相关难题。例如:

const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('成功');
  }, 1000);
});

promise.then(result => {
  console.log(`then: ${result}`);
});

promise.catch(error => {
  console.log(`catch: ${error}`);
});

setTimeout(() => {
  promise.reject('失败');
}, 500);

输出:

then: 成功

很多人会疑惑,为什么 catch 没有被执行?这是因为 Promise 的状态一旦变为 resolved,便不会再改变,即使随后调用 reject 也无效。

难点二:Promise 链式调用

Promise 的链式调用,是另一个高频考点。理解链式调用的原理,才能从容应对相关试题。例如:

const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('成功');
  }, 1000);
});

promise.then(result => {
  console.log(`then 1: ${result}`);
  return result + '!';
}).then(result => {
  console.log(`then 2: ${result}`);
}).catch(error => {
  console.log(`catch: ${error}`);
});

输出:

then 1: 成功
then 2: 成功!

需要注意的是,then 方法返回的 Promise,会成为链式调用的下一环。因此,在上述代码中,then 1 返回的 Promise,会成为 then 2 的参数。

难点三:Promise 并发处理

Promise 的并发处理,也是一个重要考点。理解 Promise 的并发机制,才能解决相关难题。例如:

const promise1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('成功 1');
  }, 1000);
});

const promise2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('成功 2');
  }, 2000);
});

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

输出:

['成功 1', '成功 2']

Promise.all 方法,会等待所有 Promise 都变为 resolved 状态,然后才执行 then 方法。

通过对这些难点的剖析,你将对 Promise 有更深入的理解,从而在考试和面试中从容应对相关试题。

结语

Promise 是 JavaScript 中非常重要的知识点,也是各类考试和面试的热门考点。通过对相关试题的分析和讲解,希望能够帮助读者更好地掌握 Promise,在实际开发中游刃有余。