js消息回退--栈

111 阅读1分钟

1. 什么是栈?

  1. 栈(stack)又名堆栈,它是一种运算受限的线性表。
  2. 栈是一种遵从后进先出(LIFO)原则的有序集合。
  3. 新添加的或待删除的元素都保存在栈的末尾,称为栈顶,另一端叫栈底。
  4. 在栈里,新元素都靠近栈顶,旧元素都接近栈底。

栈

2. 项目中用到的栈

情景一

一个音视频实时会议项目中, 涉及到心跳消息。当前处于语音通话,当收到一个指令消息时(比如: 打开摄像头), 执行并把它存入执行栈中, 但是由于当时的网络情况不好, 不支持传输视频流, 这个时候就需要把这个指令撤回, 存入回退栈中,再从执行栈中取出上一个指令再执行一遍。

情景二

会议中, 来了一个指令, 这是网络波动, 指令执行失败, 需要把指令存到回退栈中, 等网络恢复时, 从回退栈中取出, 再执行一遍。

demo

实现一个栈--stack

function Stack(){
    var items = [];     // 用来保存栈里的元素
    // 添加新元素到栈顶
    this.push = function (element) {
        items.push(element);
    }
    // 移除栈顶的元素,同时返回被移除的元素
    this.pop = function () {
        return items.pop();
    }
    // 返回栈顶的元素,不对栈做任何修改
    this.peek = function () {
        return items[items.length-1];
    }
    // 如果栈里没有任何元素就返回true,否则false
    this.isEmpty = function () {
        return items.length == 0;
    }
    // 返回栈里的元素个数,类似于数组的length属性
    this.size = function () {
        return items.length;
    }
    // 清空栈
    this.clear = function () {
        items = [];
    }
    // 打印栈
    this.print = function () {
        console.log(items.toString());
    }
}