关于同步请求接口的一个问题

#1

hello,大家好.第一次发帖求助,劳烦并感谢各位大大静心解答

题目是这样的:

我同时请求后台 3 个 API

   A,B,C
  • 当 A, B, C 皆返回成功

    操作 一

  • A, B 成功 C 失败
    操作 二

  • A或B 失败 C成功

    操作 三

  • A且B且C 失败

    返回 500 (error)

如何实现呢? 自己想过实现方案. 用Promise.all来实现,但问题返回失败的时候,我无法得知是A,B还是C返回的。

感谢平台

#2

可以设标志啊,不需要分开操作可以用计数啊,你这个设标志位就可以

#3

那怎么知道最后谁先返回呢?

#4

然后调用performance.now(),将该时间与你从后端获取到的数据组装成一个object,然后一起resolve出去,在resolve的回调中将object中对应的时间取出来传给对应的标志位,再通过每个标志位的大小来判断先后,小的就是最早的。

#5

所有请求都做类似的封装

const newFetchA = new Promise(resolved => {
  fetchA(params).then(
    res => resolved(res),
    error => resolved(error)
  );
});
// 请求 B,C 同上

然后用熟悉的 Promise.all 慢慢玩去

#6

你这不就是封装resolve而已?然后all,跟题目关系不大呀

#7

问一句,是不是每个接口的回掉函数里面都判断一遍计数是否为3然后再进行操作判断?我在想有没一个事件能3个接口都返回的结果才触发

#8

有关系啊

 Promise.all([newFetchA, newFetchB, newFetchC]).then(values => {
  // values 判断里面的成员是 res 还是 error 然后做业务
 })
#9

如果想用Promise.all,可以和后台商量,一般后台会返回一个res。code===0。计数适合跨组件的loading。