1

使用场景

  • 比如前端需要处理什么队列一类的业务
  • 比如有人下单,需要弹出什么弹窗

首先先声明一个类

接收一个 数组对象:items
class ChainQueue {
  constructor(items) {
    this.items = items || []
    this.maxNum = 200
  }
}

为队列添加数组队列

// 添加数组队列
entryArrQueue(node) {
  Array.isArray(node)
  node.map(item => this.items.push(item))
}

为当前队列添加单个对象

// 添加队列
entryQueue(node) {
  if (this.items.length > this.maxNum) {
    return
  }
  if (Array.isArray(node)) {
    node.map(item => this.items.push(item))
  } else {
    this.items.push(node)
  }
}

删除队列,返回删除的当前的项目

deleteQueue(func = () => {}) {
  assert(isFunc(func), `${func} is not function`)
  func(this.items.shift())
}

返回队列的第一个

front() {
  return this.items[0]
}
清除队列
clear() {
  this.items = []
}

所有代码

const isFunc = v => typeof v === 'function'
const assert = (condition, msg) => {
  if (!condition) throw new Error(`[dashboard]${msg}`)
}
class ChainQueue {
  constructor(items) {
    this.items = items || []
    this.maxNum = 200
  }

  // 添加数组队列
  entryArrQueue(node) {
    Array.isArray(node)
    node.map(item => this.items.push(item))
  }

  // 添加队列
  entryQueue(node) {
    if (this.items.length > this.maxNum) {
      return
    }
    if (Array.isArray(node)) {
      node.map(item => this.items.push(item))
    } else {
      this.items.push(node)
    }
  }

  // 删除队列,返回删除的当前的项目
  deleteQueue(func = () => {}) {
    assert(isFunc(func), `${func} is not function`)
    func(this.items.shift())
  }

  // 返回队列的第一个
  front() {
    return this.items[0]
  }

  // 清除队列
  clear() {
    this.items = []
  }
  get size() {
    return this.items.length
  }

  get isEmpty() {
    return !this.items.length
  }

  print() {
    console.log(this.items.toString())
    console.log(this.items)
  }
  result() {
    return this.items
  }
}

module.exports = ChainQueue

// export default ChainQueue
// export default (ChainQueue = new ChainQueue())

关于作者

订阅号


西树先森
7.1k 声望926 粉丝

从事开发多年,前端、后端(go、Python、php)、服务架构都有涉猎,经历过大公司、创业公司,擅长前端及公司技术选型。