JavaScript Promise技术详解及案例
一、Promise简介
Promise是JavaScript中用于处理异步操作的对象。它代表了一个最终可能完成(并且带有结果值)或失败(并且带有原因)的异步操作及其结果值。Promise对象允许你为异步操作的成功和失败分别绑定处理函数。
二、Promise的基本用法
创建一个Promise对象可以使用`new Promise()`构造函数,并传入一个执行器函数(executor function),该函数有两个参数:`resolve`和`reject`,分别用于处理异步操作成功和失败的情况。
let promise = new Promise((resolve, reject) => {
// 异步操作
setTimeout(() => {
let success = true; // 假设操作成功
if (success) {
resolve("操作成功");
} else {
reject("操作失败");
}
}, 1000);
});
promise.then(
value => {
console.log(value); // 输出 "操作成功"
},
reason => {
console.error(reason); // 如果有错误,则输出 "操作失败"
}
);
三、Promise的链式调用
Promise对象支持链式调用,可以在`then`方法后继续调用`then`或`catch`方法,从而处理多个异步操作。
let promise = new Promise((resolve, reject) => {
resolve("第一步");
});
promise
.then(value => {
console.log(value); // 输出 "第一步"
return "第二步";
})
.then(value => {
console.log(value); // 输出 "第二步"
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("第三步");
}, 1000);
});
})
.then(value => {
console.log(value); // 输出 "第三步"(1秒后)
})
.catch(reason => {
console.error(reason); // 如果有错误,则输出错误信息
});
四、案例讲解:使用Promise处理API请求
假设我们有一个API,用于获取用户信息。我们可以使用Promise来处理这个异步请求。
function fetchUserInfo(userId) {
return new Promise((resolve, reject) => {
// 假设我们使用fetch API来发送请求
fetch(`https://api.example.com/users/${userId}`)
.then(response => {
if (!response.ok) {
reject(new Error('Network response was not ok'));
}
return response.json();
})
.then(data => {
resolve(data);
})
.catch(error => {
reject(error);
});
});
}
fetchUserInfo(1)
.then(userInfo => {
console.log(userInfo); // 输出用户信息
})
.catch(error => {
console.error('There was a problem with the fetch operation:', error);
});