// 模拟第一个异步请求获取用户ID
function getUserId() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const userId = 123; // 假设获取到的用户ID
resolve(userId);
}, 1000);
});
}
// 模拟第二个异步请求根据用户ID获取用户信息
function getUserInfo(userId) {
return new Promise((resolve, reject) => {
setTimeout(() => {
const userInfo = { id: userId, name: '张三', age: 25 }; // 假设获取到的用户信息
resolve(userInfo);
}, 1000);
});
}
// 链式调用Promise
getUserId()
.then(userId => {
return getUserInfo(userId);
})
.then(userInfo => {
console.log(userInfo);
})
.catch(error => {
console.error('发生错误:', error);
});
getUserId
函数:
- 创建一个新的
Promise
实例。
- 使用
setTimeout
模拟异步操作,1秒后返回一个假设的用户ID,并通过resolve
将其传递出去。如果发生错误,可以使用reject
传递错误信息。
getUserInfo
函数:
- 接受一个
userId
参数,创建一个新的Promise
实例。
- 同样使用
setTimeout
模拟异步操作,1秒后返回一个假设的用户信息对象,并通过resolve
将其传递出去。如果发生错误,可以使用reject
传递错误信息。
- 链式调用Promise:
- 首先调用
getUserId
,它返回一个Promise
。
- 当
getUserId
的Promise
被resolve
(成功)时,then
方法会被调用,其回调函数接受getUserId
解析出的userId
。
- 在这个
then
回调函数中,调用getUserInfo(userId)
并返回其Promise
。这样就建立了链式调用。
- 当
getUserInfo
的Promise
被resolve
(成功)时,下一个then
方法会被调用,其回调函数接受getUserInfo
解析出的userInfo
,然后打印该用户信息。
- 如果在任何一个
Promise
中被reject
(失败),catch
方法会捕获到错误并打印错误信息。