js依次发请求面试题

需求:当有多个url在一个urls数组内,需要在当前请求回来后,再发出下一次请求。

方法1:

let ajax = function (url) {
  return new Promise(resolve => {
    setTimeout(()=> {
      console.log(url, new Date())
      resolve()
    },1000)
  })
}
let urls = [ 'url1', 'url2', 'url3', 'url4' ]
let p = null
urls.forEach((url,i)=> {
  if (i === 0) {
    p = ajax(url)  //此时p为一个pending的promise对象
  } else {
    p = p.then(()=> {
      return ajax(url)
    })
  }
})

//url1 Tue Feb 23 2021 15:04:33 GMT+0800 (中国标准时间)
//url2 Tue Feb 23 2021 15:04:34 GMT+0800 (中国标准时间)
//url3 Tue Feb 23 2021 15:04:35 GMT+0800 (中国标准时间)
//url4 Tue Feb 23 2021 15:04:36 GMT+0800 (中国标准时间)

方法2:

let ajax = function (url) {
  return new Promise(resolve => {
    setTimeout(()=> {
      console.log(url, new Date())
      resolve()
    },1000)
  })
}
let urls = [ 'url1', 'url2', 'url3', 'url4' ]
let p = Promise.resolve()  //此时p为一个promise对象
urls.forEach((url,i)=> {
  p = p.then(()=> {
    return ajax(url)  //此时p为一个pending的promise对象
  })
})

//url1 Tue Feb 23 2021 15:04:33 GMT+0800 (中国标准时间)
//url2 Tue Feb 23 2021 15:04:34 GMT+0800 (中国标准时间)
//url3 Tue Feb 23 2021 15:04:35 GMT+0800 (中国标准时间)
//url4 Tue Feb 23 2021 15:04:36 GMT+0800 (中国标准时间)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 整理自:Java面试题全集(上)https://blog.csdn.net/jackfrued/article/d...
    在水之天阅读 3,189评论 1 24
  • 1、function foo( &$var ){ unset($var); } $a=5; foo($a); va...
    荒唐镜_6427阅读 2,161评论 0 1
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 2,662评论 0 7
  • 一、CSS问题 1.flex布局 display:flex; 在父元素设置,子元素受弹性盒影响,默认排成一行,如果...
    陈二狗想吃肉阅读 789评论 0 9
  • 推荐指数: 6.0 书籍主旨关键词:特权、焦点、注意力、语言联想、情景联想 观点: 1.统计学现在叫数据分析,社会...
    Jenaral阅读 5,908评论 0 5

友情链接更多精彩内容