返回
Promise 超级实用宝典:难点题型攻克指南
前端
2024-02-05 11:23:54
破题技巧,轻松驾驭 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,在实际开发中游刃有余。