我有一个应用程序,根据表单的状态,在提交时可能必须进行0-3个API调用。这些调用中的1个取决于我们可以调用根调用的方式,因此,如果根调用仍在解析中,则我们需要等待其完成并从API返回该数据,然后再调用从属调用。所以:
这是一个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.allSettled
怎么样?getState
会反映更新后的状态吗?仅供参考:我正在使用axios
库进行这些调用。