promise构建任务队列

570 阅读1分钟
最近做一个新闻爬虫的功能,自身涉及到在请求方面做到请求策略的设置,所以首先想到了采用异步队列的形式进行请求任务排列,两种方式,话不多说,上代码:
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;
}