Javascript 如何';等待&x27;对于API在**SET-INTERVAL中再次调用函数之前的响应**

Javascript 如何';等待&x27;对于API在**SET-INTERVAL中再次调用函数之前的响应**,javascript,node.js,reactjs,async-await,setinterval,Javascript,Node.js,Reactjs,Async Await,Setinterval,我正在使用异步并等待,以便调用相同的API,但从不同的日期调用ex.-> 假设用户希望查看01/02/2020-20/02/20中的表格数据,那么我希望通过每天一个接一个地传递API来点击21次。因此,我使用了setInterval(fun,1000)。但等待不会在间隔中起作用。 请参阅下面的代码-> //fromDate = date selected by user. (for ex 01/02/2020) //momentToDate = the last date set by user

我正在使用异步并等待,以便调用相同的API,但从不同的日期调用ex.->

假设用户希望查看
01/02/2020-20/02/20
中的表格数据,那么我希望通过每天一个接一个地传递API来点击21次。因此,我使用了
setInterval(fun,1000)
。但等待不会在间隔中起作用。 请参阅下面的代码->

//fromDate = date selected by user. (for ex 01/02/2020)
//momentToDate = the last date set by user. (for ex. 20/02/20)
//endDate = fromDate + 1 (in order to get one day data from API)

         function onClickGetDateByFilter() {
            setComapreTableLoading(true);
            let endDate = moment(fromDate, 'YYYY-MM-DD hh:mm:ss');
            var callInterval = setInterval(async () => {
                endDate = moment(endDate).add(1, 'days');
                if (endDate <= momentToDate) {
                    let date = { fromDate, toDate: endDate }

                    await getDataWithClientId('clientID', date)
                        .then(async (res) => {

                            if (res.results && res.results.length > 0) {
                                setClientData({...clientData}, res.results)
                                setComapreTableLoading(false);
                            }
                        })
                        .catch(err => {
                            setComapreTableLoading(false);
                            console.log(err);
                            alert(err);
                        })
                }
                else {
                    setComapreTableLoading(false);
                    clearInterval(callInterval)
                };
            }, 1000)
       }

//fromDate=用户选择的日期。(适用于2020年2月1日前)
//momentToDate=用户设置的最后日期。(适用于ex.20/02/20)
//endDate=fromDate+1(为了从API获取一天的数据)
函数onClickGetDateByFilter(){
setComapreTableLoading(真);
设endDate=时刻(fromDate,'YYYY-MM-DD hh:MM:ss');
var callInterval=setInterval(异步()=>{
endDate=时刻(endDate)。添加(1,'天');
如果(结束日期){
如果(res.results&&res.results.length>0){
setClientData({…clientData},res.results)
setComapreTableLoading(假);
}
})
.catch(错误=>{
setComapreTableLoading(假);
控制台日志(err);
警惕(err);
})
}
否则{
setComapreTableLoading(假);
clearInterval(callInterval)
};
}, 1000)
}
我需要调用setInterval直到用户选择的最后一个日期。但使用上述方法,在从服务器获取响应之前,它会不断调用一个新的API,但我想在第一个API返回响应之后再调用该API

如有任何建议,我们将不胜感激。 谢谢


如果您需要有关代码的更多信息,可以询问。异步是一个实用模块,它为使用异步JavaScript提供了直接、强大的功能

您需要异步包来使用并行方法

$npm安装异步

从“异步”导入异步


异步包不能与异步函数混淆,因为包Async
Async wait
无关


来源:

因为您指的是名为
async
的外部模块,所以您确实需要安装并导入它。async是JS中的保留关键字,然而,async.parallel是一个npm软件包,您需要安装,然后使用import parallel从'async/parallel'导入。您需要安装
npm install async
并导入
async
@RajatSharma。不幸的是,有一个名为
async
的库,您可以导入和使用。它实现了
async.parallel
函数。
async
关键字与
async.parallel
无关,因为
async.parallel
async wait
无关。它只是一个名为
async
Yes的模块,我认为它与我们通常使用的async相同。甚至编辑器也在向我展示它的预定义方法,即使没有安装它。我的错。你能把这个问题再解释一遍,帮我解决这个新问题吗@帕特里克诺克斯