最近做一个新闻爬虫的功能,自身涉及到在请求方面做到请求策略的设置,所以首先想到了采用异步队列的形式进行请求任务排列,两种方式,话不多说,上代码:
let task: Task = (): Promise<any> => {
return new Promise((resolve) => {
})
}
runTask(tasks: Task[]) {
return tasks.reduce(async function(promise, task){
await promise
return new Promise(function (resolve) {
task().then(() => {
setTimeout(resolve, Config.requestTime) // 控制到请求之间的间隔时间
})
})
},Promise.resolve())
}
reduce会先遍历整个tasks任务列表,初始一个Promise.resolve(),await promise 等待前面promise结束继续下一个promise的生成,每个promise里面生成的上下文都会对应一个task
另一个种变相写法
function myQuequ(things){
var promise = Promise.resolve();
things.forEach((things)=>{
promise = promise.then(()=>{
return new Promise((resolve)=>{
dosomething(thing,()=>{
resolve();
})
})
})
})
return promise;
}