题目
如果业务中有一千个请求,需要依次请求,如何使用js代码实现
分析
我们知道,无论使用何种方式调用请求,都是异步的,所以这里我们使用setTimeout 代替请求,请求的时间是不固定的,就使用随机数代替,一千个请求就考虑使用遍历来完成
for(let i = 0; i < 1000; i++) {
setTimeout(() => {
console.log(i)
}, Math.random() * 100)
}
放到浏览器里面执行就会发现,这个数字并不会按照 0 - 999 打印出来,也就是说不会依次执行,达不到要求
递归
可以考虑使用递归实现, 直接上代码
function request(i = 0) {
if (i >= 1000) {
return
}
setTimeout(() => {
console.log(i)
request(++i)
}, Math.random() * 100)
}
request()
这样实现是实现了,但是有没有不使用递归的方法,还真有
async/await
使用async/await
可以避免递归的使用
function request(i) {
return new Promise((resolve) => {
setTimeout(() => {
resolve(`第${i}个`)
}, Math.random() * 100)
})
}
async function action() {
for(let i = 0; i < 1000; i++) {
const rsp = await request(i)
console.log(rsp)
}
}
action()
结束语
实际业务中,一般不会使用一千个请求依次调用,如果需要一千个请求的数据,一般是要放在后端合并请求,减少http/tcp
消耗,真有一千个请求,前端肯定也不会依次请求,只要将各个请求出来的特征数据排序就可以执行对应的回调函数。本题取自大厂面试题,希望同学们可以实现高薪的梦想。