使用JS如何实现异步函数

这篇文章主要介绍了js异步函数队列功能,结合实例形式分析了异步函数队列的应用场景、实现方法与相关操作技巧,需要的朋友可以参考下

本文实例讲述了JS异步函数队列功能。分享给大家供大家参考,具体如下:

场景:

做直播,会有入场消息,入场特效,用户如果有坐骑,需要给他展示几秒钟的坐骑特效,如果几个人同时进场,那该怎么展示呢?这时候就会想到setTimeout函数,对,思路不错,但是,异步函数队列怎么实现呢?直接上代码:

var Queue = function() {    this.list = [];};Queue.prototype = {    constructor: Queue,    queue: function(fn) {      this.list.push(fn)      return this;    },    wait: function(ms) {      this.list.push(ms)      return this;    },    dequeue: function() {      var self = this,        list = self.list;      self.isdequeue = true;      var el = list.shift() || function() {};      if (typeof el == "number") {        setTimeout(function() {          self.dequeue();        }, el);      } else if (typeof el == "function") {        el.call(this)        if (list.length) {          self.dequeue();        } else {          self.isdequeue = false;        }      }    }};

登录后复制

例子:

如果a,b差不多同时进来;
c在a,b还没完全出队列的时候,进来的;
d在a,b,c都除了队列之后再进来的。

var q = new Queue();function a() {    console.log("a执行了", new Date());}function b() {    console.log("b执行了", new Date());}function c() {    console.log("c执行了", new Date());}function d() {    console.log("d执行了", new Date());}q.wait(2000);q.queue(a);q.wait(2000);q.queue(b);q.dequeue();setTimeout(function(){//3S之后进来的    q.wait(2000);    q.queue(c);},3000);setTimeout(function(){//8S之后进来的    q.wait(2000);    q.queue(d);    q.dequeue();},8000);

登录后复制

这里我们就需要判断什么时候要调用dequeue来出队列了。(为什么c进队列的时候,不需要dequeue,但是d进来的时候就需要dequeue了呢?)

但是一般我们是无法知道用户什么时候进场的,一般都是进队列了,就该能出队列,但是如果用户是在空队列的时候进来的,之前的递归调用dequeue就执行完了,你进来需要再执行 出队列的操作。

于是,代码应该这样:

var q = new Queue();  function a() {    console.log("a执行了", new Date());  }  function b() {    console.log("b执行了", new Date());  }  function c() {    console.log("c执行了", new Date());  }  function d() {    console.log("d执行了", new Date());  }  q.wait(2000);  q.queue(a);  if (!q.isdequeue) {    q.dequeue();  }  q.wait(2000);  q.queue(b);  if (!q.isdequeue) {    q.dequeue();  }  setTimeout(function() { //3S之后进来的    q.wait(2000);    q.queue(c);    if (!q.isdequeue) {      q.dequeue();    }  }, 3000);  setTimeout(function() { //8S之后进来的    q.wait(2000);    q.queue(d);    if (!q.isdequeue) {      q.dequeue();    }  }, 8000);

登录后复制

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

在zTree中如何实现交互选项卡

详细讲解EasyUI中abs的使用

在vue-cli中有关webpack3提速优化方面的问题

以上就是使用JS如何实现异步函数的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2748914.html

(0)
上一篇 2025年3月8日 04:52:37
下一篇 2025年3月5日 21:11:33

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 在JS中如何实现的找零张数最小问题

    这篇文章主要介绍了js实现的找零张数最小问题,涉及javascript数学运算相关操作技巧,需要的朋友可以参考下 本文实例讲述了JS实现的找零张数最小问题。分享给大家供大家参考,具体如下: 完整代码如下: nbsp;html>www.…

    2025年3月8日
    200
  • 在JavaScript中有关class如何调用

    下面小编就为大家带来一片javascript中关于class的调用方法。具有很好的参考价值,希望对大家有所帮助 PS:class的调用,其实是可以叠加的,当然了这要求样式不同的情况下,如果样式相同,则后一个样式会覆盖前一个样式。 1、举例如…

    编程技术 2025年3月8日
    200
  • JS和CSS实现鼠标经过弹出一个带缓冲动画渐变效果DIV框

    这篇文章主要介绍了js+css实现鼠标经过弹出一个p框的实现方法,带缓冲渐变动画效果,涉及鼠标事件的响应及结合时间函数定时触发形成动画渐变效果的相关技巧,需要的朋友可以参考下 本文实例讲述了JS+CSS实现鼠标经过弹出一个p框效果。分享给大…

    编程技术 2025年3月8日
    200
  • 关于JS组件Bootstrap导航条的使用方法

    这篇文章主要为大家详细介绍了js组件bootstrap 导航条的使用方法,感兴趣的小伙伴们可以参考一下 导航条是在您的应用或网站中作为导航标头的响应式元组件。 1、默认的导航条 导航条在移动设备上可以折叠(并且可开可关),且在可用的视口宽度…

    2025年3月8日 编程技术
    200
  • 如何利用js实现横向拖拽导航条功能

    本文主要介绍了js实现横向拖拽导航条功能的方法。具有很好的参考价值,下面一起来看下吧 效果如下: 代码如下: nbsp;HTML>  p横向拖拽排序    body, p { padding: 0px; margin: 0px; } …

    2025年3月8日
    200
  • JS实现移动端向左滑动出现删除按钮的功能

    最近在做移动端项目时,需要实现一个列表页面的每一项item向左滑动时出现相应的删除按钮,其实实现此功能很简单的。这篇文章主要介绍了基于js实现移动端向左滑动出现删除按钮,需要的朋友可以参考下 最近在做移动端项目时,需要实现一个列表页面的每一…

    2025年3月8日
    200
  • JavaScript实现使用Canvas绘制图形

    本篇文章主要介绍了javascript实现使用canvas绘制图形的基本教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。 由于这两年HTML5火的正热,所以研究了一下,最近有个想法也是要用到HTML的相关功能,所以也要好好学习一把。…

    2025年3月8日 编程技术
    200
  • JS和Canves实现点击按钮水波纹效果

    本文给大家分享基于js和canves实现点击按钮水波纹效果,效果非常逼真,对此感兴趣的朋友一起看看吧 近来看到个不错的按钮点击效果,当点击时产生一次水波涟漪效果,挺好玩的,于是简单的实现了下(没考虑低版本浏览器兼容问题) 先看看效果吧,如下…

    2025年3月8日
    200
  • js和css3实现旋转效果

    本文主要介绍了js+css3实现旋转效果的方法。具有一定的参考价值,下面一起来看下吧 我的前面一张文章实现了用css3制作旋转的效果,现在呢,我换另外一种方法来实现.就是使用js结合css3的方法来实现的.下面我就先上图给大家看看效果吧 下…

    2025年3月8日
    200
  • 如何用JS和CSS3制作炫酷的弹窗效果

    本文给大家分享使用js和css3制作的炫酷弹窗效果,整个背景模糊,要比纯色加透明度高大上好多。对js弹窗效果感兴趣的朋友一起学习吧 昨天在家看电视时,退出的时候发现了一个弹窗效果,整个背景模糊,觉得这样的效果好炫,要比纯色加透明度高大上好多…

    2025年3月8日
    200

发表回复

登录后才能评论