MST

星途 面试题库

面试题:JavaScript异步编程之Promise链式调用

请使用Promise实现以下功能:首先发起一个异步请求获取用户ID,然后根据用户ID发起第二个异步请求获取用户信息,最后打印用户信息。请写出完整代码,并解释每一步的作用。
21.7万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
// 模拟第一个异步请求获取用户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);
    });
  1. getUserId函数
    • 创建一个新的Promise实例。
    • 使用setTimeout模拟异步操作,1秒后返回一个假设的用户ID,并通过resolve将其传递出去。如果发生错误,可以使用reject传递错误信息。
  2. getUserInfo函数
    • 接受一个userId参数,创建一个新的Promise实例。
    • 同样使用setTimeout模拟异步操作,1秒后返回一个假设的用户信息对象,并通过resolve将其传递出去。如果发生错误,可以使用reject传递错误信息。
  3. 链式调用Promise
    • 首先调用getUserId,它返回一个Promise
    • getUserIdPromiseresolve(成功)时,then方法会被调用,其回调函数接受getUserId解析出的userId
    • 在这个then回调函数中,调用getUserInfo(userId)并返回其Promise。这样就建立了链式调用。
    • getUserInfoPromiseresolve(成功)时,下一个then方法会被调用,其回调函数接受getUserInfo解析出的userInfo,然后打印该用户信息。
    • 如果在任何一个Promise中被reject(失败),catch方法会捕获到错误并打印错误信息。