美文网首页
笔试题:调用接口并发请求控制

笔试题:调用接口并发请求控制

作者: fish_yijinc | 来源:发表于2022-06-28 16:50 被阅读0次

    优化 requestUserProfile 并发请求

    requestUserProfile 是个通用用户信息接口,通过传入uid,拿用户昵称
    在一个群聊里有10多个用户,点击群聊信息,展示各个人的昵称
    10个并发请求,会阻塞接口
    10个依次请求,耗时久,显示昵称太慢
    需要优化请求,在并发和耗时之间掌握一个平衡

    import { isEqual } from 'lodash-es';
    
    // 核心用户请求
    let _requestTime = 0;
    const requestProfile = (uid: string) => {
      // 这个方法的实现不能修改
      return Promise.resolve().then(() => {
        return new Promise<void>((resolve) => {
          setTimeout(() => {
            // 模拟 ajax 异步,1s 返回
            resolve();
          }, 1000);
        }).then(() => {
          _requestTime++;
          return {
            uid,
            nick: `nick-${uid}`,
            age: '18',
          };
        });
      });
    };
    
    /**
     * @param uid uid
     * @param max 最多并发请求数量
     */
    const requestUserProfile =  (uid = '1', max = 2) => {
      // 这里调用requestProfile 进行优化
    };
    
    /**
     * 以下为测试用例,无需修改
     */
    export default async () => {
      try {
        const star = Date.now();
        await Promise.all([
          requestUserProfile('1'),
          requestUserProfile('2'),
          requestUserProfile('3'),
          requestUserProfile('1'),
        ]).then((result) => {
          if (Date.now() - star < 2000 || Date.now() - star >= 3000) {
            throw new Error('Wrong answer');
          }
          if (
            !isEqual(result, [
              {
                uid: '1',
                nick: 'nick-1',
                age: '18',
              },
              {
                uid: '2',
                nick: 'nick-2',
                age: '18',
              },
              {
                uid: '3',
                nick: 'nick-3',
                age: '18',
              },
              {
                uid: '1',
                nick: 'nick-1',
                age: '18',
              },
            ])
          ) {
            throw new Error('Wrong answer');
          }
        });
    
        return _requestTime === 3;
      } catch (err) {
        console.warn('测试运行失败');
        console.error(err);
        return false;
      }
    };
    
    

    相关文章

      网友评论

          本文标题:笔试题:调用接口并发请求控制

          本文链接:https://www.haomeiwen.com/subject/ovtzvrtx.html