javascript - 不使用 settimeout 触发多个 api
问题描述
我每 4 秒调用一次 dataUpdate 函数,直到记录长度为 0。
在数据内部更新 this.callAPI(); 是触发api调用。
我将手动超时设置为 4 秒以调用 callapi 的函数。
而不是超时,如何在上一个 api 完成后立即调用 api。
dataUpdate =()=> {
var arrayList = this.arrayList;
if(arrayList.length > 0)
{
var inputData = {
...inputData,
data:{
...inputData.data,first:'',second:''
}
};
var first = arrayList[0].first;
var second = arrayList[0].second;
inputData.data.first = first;
inputData.data.second = second;
this.setState({ inputData:inputData });
this.callAPI();
arrayList.shift();
this.arrayList = arrayList;
if(arrayList.length !== 0){
setTimeout(() => {
this.dataUpdate();
}, 4000);
}
if(arrayList.length === 0){
setTimeout(() => {
this.props.callMessage(this.totalCount);
}, 1000);
}
}
}
解决方案
你的问题在于有状态。使 callapi 函数无状态并传递所有需要的参数,以便您可以多次调用它,而不依赖于先前的调用或状态
推荐阅读
- reactjs - 使用 npx create-react-app 项目创建 React.js
- sql-server - 如何更新来自 FastAPI 服务器的数据更改事件的 React 组件
- java - 有没有办法在 api 级别 25 下做类似 `requestDismissKeyGuard` 的事情?
- python - 在一个数据框中找到离另一个最近的索引
- javascript - 无法访问传递给子组件的道具
- javascript - 如何在 Firebase 函数中访问不同的集合
- android - 如何在没有新代码实施的情况下向我的*预安装*应用程序用户发送强制更新,例如 Gmail?
- java - 如何在 RecyclerView 适配器类中初始化正确的 TextView?
- javascript - 过滤谓词函数不返回任何内容并且无法读取属性“数据” - MatTableDataSource 角度
- javascript - 如何在数组中调用对象