【问题标题】:Resolve multiple network calls at once in react在反应中一次解决多个网络调用
【发布时间】:2021-11-05 21:47:58
【问题描述】:

我想从休息服务下载时间序列数据。目前,我有以下实现

async function getTimeSeriesQuery(i) {
  // Using this to show how gql is being used
  appollo.query(getChunkQueryOptions(i))
}

var promises = []

for(var i = 0; i < numberChunks; i++) {
  promises.push(getTimeSeriesQuery(i))
}
const data = Promise.all(promises)

image.png

我预计承诺与一个承诺所花费的时间相同,但它似乎与我在承诺列表中的承诺数量成比例

【问题讨论】:

标签: javascript reactjs typescript graphql


【解决方案1】:

每个 Promise 的执行时间与列表中的 Promise 数量无关,也与另一个 Promise 的执行时间无关。

Promise.all 不会开始 Promise 的执行,它只是等待它们完成。如果所有的 Promise 都已经提前解决了(例如,如果所有 HTTP 请求都已经完成),那么 Promise.all 将几乎立即解析为一个值,因为不再需要等待。 Promise.all,以列表的形式给出每个 promise 的结果。

示例: 我们有 2 个承诺的清单: - 1 个需要 10 秒 - 2 个需要 1 秒 Promise.all 需要 10 秒。

【讨论】:

    【解决方案2】:

    如前所述,无法事先确定每个请求的持续时间。

    但是,如果您想等待所有操作完成,则需要在数组中添加承诺(您发布的 sn-p 没有)。如果您想要变量中的数据,则需要使用.thenawait 来获取结果。

    所以你需要从你的getTimeSeriesQuery返回实际的承诺

    async function getTimeSeriesQuery(i) {
      // Using this to show how gql is being used
      // was missing the return
      return appollo.query(getChunkQueryOptions(i))
    }
    
    var promises = []
    
    for(var i = 0; i < numberChunks; i++) {
      promises.push(getTimeSeriesQuery(i))
    }
    
    const data = await Promise.all(promises)
    

    【讨论】:

      猜你喜欢
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-20
      • 2020-05-01
      • 2010-11-19
      相关资源
      最近更新 更多