资讯专栏INFORMATION COLUMN

浅谈异步编程

laoLiueizo / 2029人阅读

摘要:等到一段时间后,车到了,小红打电话给小明车到了发布,小明在接到电话之后,要做一些准备订阅时定义的回调函数。工作中的异步通过事件实例去做调控,简单的代码示例是一个事件实例,负责发布订阅者的内部实现订阅发布另一端程序干一些事情。

浅谈异步编程 引子
页面渲染与setTimeout();
同步与异步------我的理解
任务在当次事件循环中阻塞后续任务进行的(指的是耗时较多,这个多少,暂时还没有个概念,反正就是在获取的cpu时间片中不做实际事情的就是阻塞吧),就是同步;任务在当次事件循环中不阻塞后续任务进行的(简单的可以理解为,一条流水线上,某个步骤要检测是否合格,不影响流水线的情况下,由流水线之外的工作人员,相当于worker,去做这件事情),就是异步;
异步编程重要js设计模式-------发布订阅者模式

现实中的异步----------买车

小明要买车,小红告诉他现在车还没到,到的时候再打电话给他,于是小明留下了联系方式(订阅)。等到一段时间后,车到了,小红打电话给小明车到了(发布),小明在接到电话之后,要做一些准备(订阅时定义的回调函数)。

工作中的异步

通过事件实例去做调控,简单的代码示例:
// emitter是一个事件实例,负责发布订阅者的内部实现

// 订阅
emitter.on("eventName", function () {
    dosomeThing();
});

// 发布
// 另一端程序干一些事情。好了~时机到了,就:
emitter.emit("eventName");
发布订阅者模式其实在代码执行顺序上就是:订阅(监听)------> 发布(触发)

传统异步编程

通过高阶函数实现
// 定义高阶函数
var asyncFn = function (cb) {
    // dosomeThing async...
    typeof === "function" && cb();
};
// 使用
asyncFn(function (res) {
    // dosomeThing callback...
});

现在比较常用的Promise

var asyncFn = function () {
    // dosomeThing sync...
    Promise.resolve(); // 通常用于当次事件循环(或者当前线程执行)结束之后才需要干的事情
}
// 码段1
let asyncFn = new Promise((resolve, reject) => {
    resolve("完成");
});

asyncFn.then((res) => {
    console.log(res);
});
console.log("同步");
码段1 执行结果:
VM51728:1 同步执行
22:26:27.891 VM51728:1 完成
22:26:27.891 undefined
产生异步的情况

setTimout()

setInterval()

requestAnimationFrame()

Promise.resolve()方法

各种ajax异步请求

Vue的nextTick()方法,由三种方式实现

jsonp加载方式

...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/90113.html

相关文章

  • 浅谈JavaScript中的事件循环机制

    摘要:事件循环背景是一门单线程非阻塞的脚本语言,单线程意味着,代码在执行的任何时候,都只有一个主线程来处理所有的任务。在意识到该问题之际,新特性中的可以让成为一门多线程语言,但实际开发中使用存在着诸多限制。这个地方被称为执行栈。 事件循环(Event Loop) 背景 JavaScript是一门单线程非阻塞的脚本语言,单线程意味着,JavaScript代码在执行的任何时候,都只有一个主线程来...

    Pluser 评论0 收藏0
  • [前端工坊]浅谈Web编程中的异步调用的发展演变

    摘要:三即生成器,它是生成器函数返回的一个对象,是中提供的一种异步编程解决方案而生成器函数有两个特征,一是函数名前带星号,二是内部执行语句前有关键字调用一个生成器函数并不会马上执行它里面的语句,而是返回一个这个生成器的迭代器对象。 文章来自微信公众号:前端工坊(fe_workshop),不定期更新有趣、好玩的前端相关原创技术文章。 如果喜欢,请关注公众号:前端工坊版权归微信公众号所有,转载请...

    qpwoeiru96 评论0 收藏0
  • 浅谈 JavaScript 模块化编程

    摘要:与在模块化编程的世界中,有两个规范不得不提,它们分别是和。所有依赖于某个模块的代码全部移到模块加载语句的回调函数中去。的语句接受两个参数在回调函数中,可以通过变量引用模块。回调函数的返回值就是当前对象的导出值。 JavaScript本身不是一种模块化语言,设计者在创造JavaScript之初应该也没有想到这么一个脚本语言的作用领域会越来越大。以前一个页面的JS代码再多也不会多到哪儿去,...

    wdzgege 评论0 收藏0
  • jdk7:浅谈 AIO NIO2.0

    摘要:一概述在引入同步非阻塞包之后,终于在版本加入了异步的。注意,无论用还是,这里的调用都是非阻塞的立即返回。不过,由于朝鲜还没有研发出能够重返大气层的运载火箭,所以大浦洞号尚不具备搭载弹头的攻击能力。 一、概述 JDK在1.4引入NIO(同步非阻塞)包之后,终于在1.7版本加入了异步IO的AIO。同步异步阻塞和非阻塞等概念,建议参考 《Unix网络编程》 卷1. ,这里只谈AIO的api。...

    wanghui 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<