【问题标题】:How to 'AWAIT' for the response of API before call again the function in **SET-INTERVAL**如何在再次调用 **SET-INTERVAL** 中的函数之前“等待”API 的响应
【发布时间】:2020-11-05 04:55:03
【问题描述】:

我正在使用 async 和 await,以便调用相同的 API,但日期不同。 ->

假设用户想查看来自01/02/2020 - 20/02/20 的表格数据,所以我想通过每天一个接一个地访问 API 21 次。所以,我使用了setInterval(fun, 1000)。但是 AWAIT 不会在间隔中工作。 请看下面的代码 ->

//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)
       }

我需要在用户选择的最后一个日期之前调用 setInterval。但是使用上述方法,在从服务器获取响应之前,它会一直调用一个新的 API,但是我想在第一个 API 返回响应后第二次调用 API。

任何建议也将不胜感激。 谢谢。

如果您需要有关代码的更多信息,可以询问。

【问题讨论】:

  • 因为你的意思是名为async的外部模块,你确实需要安装和导入它。
  • async 是 JS 中的保留关键字,但是 async.parallel 是一个 npm 包,您需要安装然后使用 import parallel from 'async/parallel' 导入
  • 需要安装npm install async并导入async
  • @RajatSharma 很不幸,但是有一个名为 async 的库,您可以导入和使用它。它实现了async.parallel 函数。 async关键字与async.parallel无关
  • 因为async.parallelasync-await无关。它只是一个名为 async 的模块

标签: javascript node.js reactjs async-await setinterval


【解决方案1】:

Async 是一个实用模块,它为处理异步 JavaScript 提供了直接、强大的功能。

您需要 Async 包才能使用并行方法。

$ npm install async

import async from 'async';


不要将异步包与异步函数混淆,因为包Asyncasync-await无关。

来源:https://caolan.github.io/async/v3/docs.html

【讨论】:

  • 是的,我认为它与我们通常使用的 Async 相同。即使没有安装它,编辑器也会向我展示它的预定义方法。我的错。
  • 能否请您再次查看问题并帮我解决这个新问题? @PatricNox
猜你喜欢
  • 1970-01-01
  • 2020-03-05
  • 2021-11-18
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-09
相关资源
最近更新 更多