【问题标题】:Promise.all/for await and fetch array of queries for itPromise.all/for await 并为其获取查询数组
【发布时间】:2019-05-24 02:53:41
【问题描述】:

我可以吗

array.push(fetch(`something`))

用于在 Promise.all 中执行 / 用于等待,或者

fetch(`something`)

在我将它推送到数组之前执行它自己,而不是在我想要的时候在代码中进一步执行?


更多信息:

假设我需要使用 for await(如果我想一个接一个地执行它们)或 Promise.all(如果我想一起异步执行它们)进行许多查询。

我创建了一个查询数组:

let queries = []
let allResults = []

兑现承诺:

tiersQueries.push(fetch(`something`))

然后他们像这样执行它:

for await (const oneResult of queries) {
 allResults.push(oneResult)
}

或者这个:

let results = await Promise.all(array)
allResults = results

【问题讨论】:

  • fetch() 返回一个承诺并且不等待任何东西。
  • 那么此时数据获取已经开始了吗?
  • 是的,已经开始了
  • 我认为你只需要包装一些东西就可以了。我建议你提出真正的代码(作为一个工作单元,不是所有的,而是相关的部分......),这样你就可以显示你的问题到底出在哪里。程序员喜欢代码。

标签: javascript es6-promise


【解决方案1】:

promise 的工作方式是,它们会在创建后立即开始执行,但它们会存储其状态(已解决、已拒绝或待处理),因此即使在完成后附加的 .then.catch 处理程序仍会触发。同样,Promise.all 只是等待所有的 Promise 被解决,它并不关心在你传递它们之前它们是否被解决了 .all。这意味着您完全可以将所有获取推送到一个数组并使用Promise.all 附加解析处理程序,以便在它们完成时处理所有它们的结果(即使它们都在.all 运行之前完成)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多