在写一个玩具爬虫,遇到异步发送请求,同步处理请求的问题,发现用promise.all在遇到错误的时候,会抛弃这一次的所有成功请求,所以想补充一下用法,还在试验阶段。。
请暂时无视我的命名。。。反正写完就忘了,哈哈
var createdP = function (t) { //创建异步对象
var a = new Promise((res, rej) => {
let d = Math.random()
if (d < 0.5) {
setTimeout(function () {
res(d) }, 10 * d)
} else {
setTimeout(function () {
rej(d) }, 10000 * d)
}
})
return a
}
var a = [createdP(), createdP(), createdP(), createdP(), createdP()] //创建异步对象数组
var f = function (e) { //封装函数
let n = 0
let result=[]
return new Promise((res,rej)=>{
e.forEach((a,i) => {
a.then((t) => {
n++
result[i]=t
if (n == e.length) {
res(result)
}
}).catch(a => {
n++
result[i]=a
if (n == e.length) {
res(result)
}
})
})
})
}
var c =f(a) //c是一个promise对象,只有在所有请求都有结果的情况下,才会结束pending状态
复制代码