需求:当有多个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 (中国标准时间)