for循环中的async问题

发布于 2022-09-07 16:30:27 字数 570 浏览 24 评论 0

async function getTitle(url) {
    let response = await fetch(url);
    let html = await response.text();
    return html.match(/<title>([\s\S]+)<\/title>/i)[1];
  }
  for(let i=0;i<2;i++){
    let urls = `https://tc39.github.io/ecma262/`
    !async function(){
      let result = await getTitle(urls).then(function(title){
        console.log('22222',title,i)
        return title
      })
      console.log(result)
    }()

  }```
实际运行结果是,同时发生了两个请求,然后等待请求接过返回后,打印结果

![clipboard.png](/img/bVbdCHI)
想期望是请求完第一个接口,并且成功返回后,再请求第二个接口请求

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

别挽留 2022-09-14 16:30:27

抛砖引玉。

async function getTitle(url) {
  let response = await fetch(url);
  let html = await response.text();
  return html.match(/<title>([\s\S]+)<\/title>/i)[1];
}
(async function () {
  for (let i = 0; i < 2; i++) {
    let urls = `https://tc39.github.io/ecma262/`

    let result = await getTitle(urls).then(function (title) {
      console.log('22222', title, i)
      return title
    })
    console.log(result,Date.now())
  }
})()
心安伴我暖 2022-09-14 16:30:27

那你在第一个获取数据并处理后调用第二个请求啊。(需要调整你的处理逻辑),类似

i=0;
function abc(x){
    let result = await getTitle(urls).then(function(title){
    console.log('22222',title,i)
    i++;
    if(i<x) abc(x);
    return title
}
abc(3);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文