创建 Promise
js
let promise = new Promise((resolve, reject) => {
// 异步操作
if (成功) {
resolve(value);
} else {
reject(error);
}
});
Promise.prototype.then()
- 用于指定当Promise被解决(fulfilled)或拒绝(rejected)时的回调函数。
- 参数:可以是两个函数,第一个用于处理解决值,第二个用于处理拒绝的原因。
- 返回:一个新的Promise对象,该对象与原Promise链式调用。
js
promise.then(
function(value) {
// 当Promise解决时调用
},
function(reason) {
// 当Promise拒绝时调用
}
);
Promise.prototype.catch()
- 用于指定当Promise被拒绝时的回调函数。
- 参数:一个函数,用于处理拒绝的原因。
- 返回:一个新的Promise对象。
javascript
promise.catch(function(reason) {
// 处理拒绝的原因
});
Promise.prototype.finally()
- 用于指定一个无论Promise是解决还是拒绝都会执行的回调函数。
- 参数:一个函数,在Promise解决或拒绝后执行。
- 返回:一个新的Promise对象。
vjavascript
promise.finally(function() {
// Promise解决或拒绝后都会执行
});
Promise.all()
- 用于将多个Promise实例包装成一个新的Promise。
- 参数:一个Promise实例的数组或类数组对象。
- 返回:一个新的Promise,当所有传入的Promise都解决时解决,如果任何一个Promise被拒绝,则立即拒绝。
javascript
Promise.all([promise1, promise2, ...]).then(values => {
// 当所有Promise都解决时调用
}).catch(error => {
// 如果任何一个Promise被拒绝时调用
});
Promise.race()
- 用于将多个Promise实例包装成一个新的Promise。
- 参数:一个Promise实例的数组或类数组对象。
- 返回:一个新的Promise,当传入的任何一个Promise解决或拒绝时,立即解决或拒绝。
javascript
Promise.race([promise1, promise2, ...]).then(value => {
// 当任何一个Promise解决时调用
}).catch(error => {
// 当任何一个Promise拒绝时调用
});
Promise.resolve()
- 用于创建一个解决(fulfilled)状态的Promise对象。
- 参数:解决的值。
- 返回:一个新的解决状态的Promise对象。
javascript
let promise = Promise.resolve(value);
Promise.reject()
- 用于创建一个拒绝(rejected)状态的Promise对象。
- 参数:拒绝的原因。
- 返回:一个新的拒绝状态的Promise对象。
javascript
let promise = Promise.reject(reason);
Promise.allSettled()
- 用于等待多个Promise实例都settled(解决或拒绝)。
- 参数:一个Promise实例的数组或类数组对象。
- 返回:一个新的Promise,当所有传入的Promise都settled时解决,解决的值是一个对象数组,每个对象描述了对应的Promise的结果。
javascript
Promise.allSettled([promise1, promise2, ...]).then(results => {
// 当所有Promise都settled时调用
});
async/await 是什么
async
/await
是 JavaScript 中处理异步操作的一组语法糖,它们建立在 Promise
之上,允许你以同步的方式编写异步代码。这种方法可以使异步代码的阅读和编写更加直观,减少了回调函数的嵌套,也简化了 Promise
链的复杂性。
js
async function fetchData() {
try {
const response = await fetch('url'); // 等待Promise解决
const data = await response.json(); // 等待另一个Promise解决
return data;
} catch (error) {
console.error('There was an error!', error);
}
}