1.then()
在 JavaScript 中, then() 是Promise 对象的核心方法,用于指定异步操作成功后的回调函数,也是 fetch 、Promise 链式调用的关键,常和 catch() 、 finally() 配合处理异步流程。
一、 then() 基本语法
javascript
promise.then(onFulfilled[, onRejected]);
- onFulfilled :Promise 状态变为 fulfilled (成功)时执行的回调函数,接收异步操作的返回值作为参数。
- onRejected (可选):Promise 状态变为 rejected (失败)时执行的回调函数,接收错误信息作为参数(通常更推荐用 catch() 单独处理错误)。
二、核心特性:链式调用
then() 执行后会返回一个新的 Promise 对象,因此可以连续调用 then() ,实现异步操作的依次执行,上一个 then() 的返回值会作为下一个 then() 的参数。
javascript
// 基础链式调用示例
new Promise((resolve) => {
setTimeout(() => resolve(10), 1000);
})
.then((num) => {
console.log(num); // 10
return num * 2; // 返回值传递给下一个then
})
.then((num) => {
console.log(num); // 20
return num + 5;
})
.then((num) => {
console.log(num); // 25
});
三、 then() 在 fetch 中的应用
fetch 返回 Promise 对象,因此通过 then() 链式处理响应解析和数据处理是最常见的用法:
javascript
fetch('https://jsonplaceholder.typicode.com/todos/1')
// 第一个then:解析响应为JSON格式(返回新的Promise)
.then((response) => {
if (!response.ok) {
throw new Error(`HTTP错误:${response.status}`); // 手动抛出错误,触发catch
}
return response.json();
})
// 第二个then:处理解析后的JSON数据
.then((data) => {
console.log('请求到的数据:', data);
})
// 捕获链式调用中所有的错误
.catch((error) => {
console.error('请求失败:', error);
});
fetch('请求地址').then(json方法).then('第二次操作')