承诺链接到可能解决的承诺

时间:2020-10-08 17:09:07

标签: javascript reactjs react-redux axios

我有一个应用程序,根据表单的状态,在提交时可能必须进行0-3个API调用。这些调用中的1个取决于我们可以调用根调用的方式,因此,如果根调用仍在解析中,则我们需要等待其完成并从API返回该数据,然后再调用从属调用。所以:

  1. 根电话
  2. 依赖电话
  3. 致电3

这是一个React / Redux项目。我可以跟踪在redux存储中正在“提交”的调用,如果根调用是“提交”,则可以设置setInterval来检查它是否已解决,然后再解除依赖调用。由于此文件在react组件之外,因此要实现上述方法,我将必须导入商店,并依靠store.getState()方法来检查商店的状态(如果之前的状态刚刚更改过),当其中调用的操作将更新发送给reducer时,该块被阻止。在触发异步操作后直接调用getState会反映正确更新的状态吗?

或者,如果我将最新的调用存储在api文件中的全局变量中,然后天真地将回调链接到它,该怎么办呢?

api.js

let currentRootCall = Promise.resolve(null);

function setCurrentRootCall(call) {
  currentRootCall = call;
}

export default function submit(values){
  ...
  if (willSubmitRootCall) {
    rootCall = doRootCall(values);
    setCurrentRootCall(rootCall);
  } else {
    rootCall = currentRootCall;
  }
  ...
  if (willSubmitDependentCall) {
    rootCall.then(() => doDependentCall(values));
  }
  if (willSubmit3rdCall) {
    thirdCall = do3rdCall(values);
  } else {
    thirdCall = Promise.resolve(null);
  }
  ...
  return Promise.allSettled([rootCall, thirdCall])
    .then(...) // fire off call completed actions for each of the 3 calls in the redux stores
}

这将使我省去轮询redux存储以查看呼叫是否完成,然后必须清理间隔的麻烦。据我了解,链接到已解决的Promise会立即触发链接的回调。我感觉好像在这里缺少什么。

4个问题:

  • 这种Promise链接方法是否有问题?
  • 将天真地链接到可能已经解决的Promise原因 问题? Promise.allSettled怎么样?
  • 在轮询redux存储方法中,调用异步操作后直接在存储上调用getState会反映更新后的状态吗?
  • 有更好的方法吗?

仅供参考:我正在使用axios库进行这些调用。

0 个答案:

没有答案