【问题标题】:How can i fetch urls sequentially?如何按顺序获取网址?
【发布时间】:2020-03-06 02:13:49
【问题描述】:

我有包含 url 的数组。首先,我需要同时获取第一个和第二个 url,当其中一个得到解决时,我将获取下一个 url。在不会获取所有 url 时重复。我怎样才能做到这一点 ?

【问题讨论】:

  • 发布您的代码,如果您有任何尝试。
  • 你会 Promise.race 前两个,然后是一个简单的承诺链,用于后续的 url ......类似于a.slice.(2).reduce((p,u)=>p.then(r=>fn(u)),Promise.race(a.slice(0,2).map(u=>fn(u)))); 其中a 是你的url数组,fn 是处理 url 获取的函数,返回一个在获取 url 时解析的 promise
  • 或在async 函数中,您可以使用await 执行上述操作...更易于阅读const res1=await Promise.race(a.slice(0,2).map(u=>fn(u))); for (let u of a.slice(2)) { let res=await fn(u); }

标签: javascript arrays promise async-await fetch


【解决方案1】:

您没有显示任何代码,所以我必须提供一个通用示例。 fetch() 返回一个承诺。如果您想按顺序运行循环等待每个fetch() 操作的承诺,那么最简单的方法是使用asyncawait

async function someFunc(array) {
    for (let item of array) {
        let result = await fetch(/* pass arguments here using item */);
        // process result here
    }
    return someValue;    // this becomes the resolved value of the promise
                         // the async function returns
}

// usage
// all async functions return a promise
// use .then() on the promise to get the resolved value
someFunc(someArray).then(results => {
    console.log(results);
}).catch(err => {
    console.log(err);
});

【讨论】:

  • @elabugaa - 这回答了你的问题吗?如果是这样,您可以通过单击答案左侧的复选标记在此处向社区表明这一点。这也将为您在 stackoverflow 上赢得一些声誉点,以遵循正确的程序。如果这没有回答您的问题,请评论您仍然对问题的哪一部分感到困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-28
  • 2011-01-26
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多