for循环中的async问题

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)
想期望是请求完第一个接口,并且成功返回后,再请求第二个接口请求
阅读 4.7k
2 个回答

抛砖引玉。

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

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

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);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题