首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Angular的12个经典问题,看看你能答对几个?(文末附带Angular测试)

在文中,我们将会接触到很多Angular 2的重要概念,并附扩展阅读资料和自查小测试,供大家评估自己对Angular的了解程度。 Angular 经典问题及扩展阅读 1. ...如果服务器的HTTP请求结果或其它一些异步操作不再需要,则Observable的订阅者可以取消订阅,而Promise将最终调用成功或失败的回调,即使你不需要通知或其提供的结果。...2正式版已经发布,部分产品也已经对Angular 2正式版进行了支持。...你是否也想知道自己到底掌握的如何呢?...感兴趣的同学,可以尝试构建一个“答题系统应用程序”,具体要求为: 有三个组成部分:测试视图、审查结果和显示结果 接受json格式的提问问题,你可以以预定义的格式从服务器发送json,Angular2测试应用需要在客户端呈现出答题界面

17.4K80

从发布订阅模式入手读懂Node.js的EventEmitter源码

,但是如果有几个互相依赖的异步API调用,回调层级太多可能就会陷入“回调地狱”。...这个例子里面有三层回调,我们已经有点晕了,如果再多几层,那真的就是“地狱”了。 发布订阅模式 发布订阅模式是一种设计模式,并不仅仅用于JS中,这种模式可以帮助我们解开“回调地狱”。..."回调地狱"了,只需要让后面的订阅前面的成功消息,前面的成功后发布消息就行了。...如果不是错误类型的事件,就把订阅的回调事件拿出来执行: image.png 取消订阅 代码传送门:github.com/nodejs/node… EventEmitter里面取消订阅的API是removeListener...总结下来发布订阅模式有以下特点: 解决了“回调地狱” 将多个模块进行了解耦,自己执行时,不需要知道另一个模块的存在,只需要关心发布出来的事件就行 因为多个模块可以不知道对方的存在,自己关心的事件可能是一个很遥远的旮旯发布出来的

92331
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    《深入浅出Node.js》:Node异步编程解决方案 之 事件发布-订阅模式

    const emitter = new events.EventEmitter(); // 订阅 event1命名事件,并给出当触发此命名事件时执行的回调函数 // 订阅回调函数执行同步模式 emitter.on...,并给出当触发此命名事件时执行的回调函数 // 订阅回调函数执行异步模式 emitter.on("event2", function ( msg ) { // 命名事件对应的回调函数 let...事件发布-订阅模式可以实现一个事件与多个回调函数的关联,这些回调函数又称事件监听器。通过emit()触发事件后,消息就会立即传递给当前事件的所有监听器执行。...为处理异常,EventEmitter对象对error事件进行了特殊对待。如果运行其间的错误触发了error事件,EventEmitter会检查是否有对error事件添加过监听器。...; status = "ready"; } ); } }; 可以将上例中db.select(...)换成自执行函数配合定时器来模拟短时间大并发的场景,测试代码是否有效

    1.3K30

    Angular快速学习笔记(4) -- Observable与RxJS

    这个对象定义了一些回调函数来处理可观察对象可能会发来的三种通知 通知类型 说明 next 必要。用来处理每个送达值。在开始执行后可能执行零次或多次。 error 可选。用来处理错误通知。...// Execute with the observer object myObservable.subscribe(myObserver); subscribe() 方法还可以接收定义在同一行中的回调函数...at 3 seconds): 2nd sequence finished RxJS 库 RxJS(响应式扩展的 JavaScript 版)是一个使用可观察对象进行响应式编程的库,它让组合异步代码和基于回调的代码变得更简单...比如: EventEmitter 类派生自 Observable。...HTTP 模块使用可观察对象来处理 AJAX 请求和响应 路由器和表单模块使用可观察对象来监听对用户输入事件的响应 事件发送器 EventEmitter Angular 提供了一个 EventEmitter

    5.3K20

    从一道面试题简单谈谈发布订阅和观察者模式

    * * 注册事件监听者 * @param {String} type 事件类型 * @param {Function} cb 回调函数 */ on(type.../** * 发布事件 * @param {String} type 事件类型 * @param {...any} args 参数列表,把emit传递的参数赋给回调函数...想测试的朋友可以直接打开vue官网,在控制台试试,也可以在自己的vue项目中实践下哦。 发布订阅模式 其实仔细看看,EventEmitter就是一个典型的发布订阅模式,实现了事件调度中心。...我们刚刚实现的EventEmitter的一个实例ee就是一个事件调度中心,发布者和订阅者是松散耦合的,互不关心对方是否存在,他们关注的是事件本身。...注册事件订阅行为 * @param {String} type 事件类型 * @param {Function} cb 回调函数 */ subscribe(type

    1K10

    如果面试官让你讲讲发布订阅设计模式?

    实现的思路:新增 once 订阅方法,当响应了对应“发布者消息”,则主动取消订阅当前执行的回调函数。...首先梳理下缓存消息的逻辑流程: UML时序图 发布者发布消息,事件中心检测是否存在订阅者,如果没有订阅者订阅此条消息,则把该消息缓存到离线消息队列中,当有订阅者订阅时,检测是否订阅了缓存中的事件消息,...2.4 回调函数传参&执行环境 在上面的回调函数中,我们可以发现是一个没有返回值,没有入参的函数,这其实有些鸡肋,在函数运行的时候会指向执行的上下文,可能某些回调函数中含有this指向就无法绑定到事件中心上...换句话说,开发者在 on('eventName', 回调函数) 的时候,是否应该主动绑定 this 指向?在当前设计下,初步认为无参数的回调函数自行绑定 this 比较合适。...首先,EventEmitter3(后续简称:EE3)的实现思路,用Events对象作为“回调事件对象”的存储器,类比我们上述实现的“发布订阅模式”作为事件的执行逻辑,另外addListener() 函数增加了传入执行上下文环境参数

    2.7K30

    Nest.js 实战 (十二):优雅地使用事件发布订阅模块 Event Emitter

    @nestjs/event-emitter 是一个 Nest.js 的社区模块,基于强大的 eventemitter2 库,它提供了事件发布/订阅的功能,使得在 Nest.js 应用程序中实现事件驱动架构变得简单...}); }}4、 订阅事件我们在另一个服务中使用 on 方法订阅发布的事件import { Injectable, Inject } from '@nestjs/common';import { EventEmitter2...wildcard: true, // 启用或禁用通配符支持,如果启用,那么可以使用通配符来订阅事件 // 当有新的监听器被添加时触发的回调函数 newListener: (eventName...) => { console.log(`New listener added for event: ${eventName}`); }, // 当监听器被移除时触发的回调函数...=> { console.log(`Listener removed for event: ${eventName}`); }, // 当事件处理过程中出现错误时的回调函数

    16210

    day045: 能不能简单实现一下 node 中回调函数的机制?

    回调函数的方式其实内部利用了发布-订阅模式,在这里我们以模拟实现 node 中的 Event 模块为例来写实现回调函数的机制。...首先是addListener: // once 参数表示是否只是触发一次const wrapCallback = (fn, once = false) => ({ callback: fn, once..., 然后在 emit 的时候遍历回调列表,将标记了once: true的项remove掉即可。...handler) return; else this.events.delete(type);} 现在我们测试一下: let e = new EventEmitter();e.addListener(...因此在执行回调时候可以根据情况调用 call 或者 apply。 考虑到内存容量,应该设置回调列表的最大值,当超过最大值的时候,应该选择部分回调进行删除操作。 鲁棒性有待提高。

    51620

    Node.js 知名框架 Express Koa 都在使用的 Events 模块你了解吗?

    事件是否等价于异步? 先从一个简单的例子开始 事件驱动是 Node.js 的核心,怎么体现事件驱动呢?...通常一种最常见的形式就是回调,触发一次事件,然后通过回调来接收一些处理,关于这种形式在 JavaScript 编程中屡见不鲜,例如 fs.readFile(path, callback)、TCP 中的...listener); this.on(type, _onceWrap(this, type, listener)); return this; }; 编码实现 利用 once 方法将所有请求的回调都压入事件队列中...例二结果为只输出一次 test,emitter.on('test', test); 这行代码只是在当前的事件回调中添加了一个事件监听器。...EventEmitter 本质上就是观察者模式的实现,一个类似的模式是发布/订阅,生产者将消息发布之后无需关心订阅者的实现,关注过Nodejs技术栈公众号的同学,也许你会收到过我之前发布的 RabbitMQ

    2K41

    【node不完全指西】EventEmitter (事件发布订阅模式)解析

    从node异步编程解决方案说起吧: 事件发布/订阅模式 Promise/deferred模式 流程控制库 事件发布/订阅模式 事件监听器模式是一种广泛运用于异步编程的模式,是回调函数的事件话,又称发布/...订阅模式。...= this.getMaxListeners()) { console.warn('警告-监听器Number过大'); } }; 解析: on函数是帮定的初始函数,首先判断是否是首次进行侦听...this.on(type, wrap, flag); }; 解析: 实现为在callback上包装一层remove操作,再当做一个新的callback传入on函数 这样的的话在首次执行回调的时候就会执行...listener.call(this, ...args); }); } }; 解析: 也比较直观,如果events里面存在type的监听器队列,则队列里的每个回调都执行一遍

    68930

    百度某部门一面原题(附答案)

    class EventBus { constructor() { this.events = {}; // 存储事件及其对应的回调函数列表 } // 订阅事件 subscribe...subscribe 方法用于订阅事件,publish 方法用于发布事件并触发相关的回调函数,unsubscribe 方法用于取消订阅事件。我们使用全局的 eventBus 对象来执行订阅和发布操作。...下面是一个简单的 EventEmitter 类实现的基本示例: class EventEmitter { constructor() { this.events = {}; // 用于存储事件及其对应的回调函数列表...; // 如果事件不存在,创建一个空的回调函数列表 this.events[eventName].push(callback); // 将回调函数添加到事件的回调函数列表中 } //...on 方法用于订阅事件,emit 方法用于发布事件并触发相关的回调函数,off 方法用于取消订阅事件,once方法用于添加一次性的事件监听器。

    20420

    百度一面,直接问痛我

    class EventBus { constructor() { this.events = {}; // 存储事件及其对应的回调函数列表 } // 订阅事件 subscribe...subscribe 方法用于订阅事件,publish 方法用于发布事件并触发相关的回调函数,unsubscribe 方法用于取消订阅事件。我们使用全局的 eventBus 对象来执行订阅和发布操作。...下面是一个简单的 EventEmitter 类实现的基本示例: class EventEmitter { constructor() { this.events = {}; // 用于存储事件及其对应的回调函数列表...; // 如果事件不存在,创建一个空的回调函数列表 this.events[eventName].push(callback); // 将回调函数添加到事件的回调函数列表中 } //...on 方法用于订阅事件,emit 方法用于发布事件并触发相关的回调函数,off 方法用于取消订阅事件,once方法用于添加一次性的事件监听器。

    14620

    发布订阅模式,在工作中它的能量超乎你的想象

    ),当一个对象的状态发送改变时,所有依赖于它的对象都将得到状态改变的通知 正所谓,字数不多,不代表作用不大,那继续来看下它的作用 作用 广泛应用于异步编程中(替代了传递回调函数) 对象之间松散耦合的编写代码...所以我们要想实现一个自己的发布订阅模式,以后在工作中使用,也需要一点点来的,表捉急,先从最简单的说起 自定义事件 let corp = {}; // 自定义一个公司对象 // 这里放一个列表用来缓存回调函数...当发布的时候再把列表里存的函数依次执行 this.list.forEach(cb => { cb.apply(this, arguments); }); }; // 测试用例...,其实说起来也是比较简单的,来一起屡屡思路吧 思路: 创建一个对象(缓存列表) on方法用来把回调函数fn都加到缓存列表中 emit方法取到arguments里第一个当做key,根据key值去执行对应缓存列表中的函数...先来看看如何使用吧,来个测试用例看看 测试用例 / {'失恋', [findboy, drink]} // 监听的目的 就是为了构造这样一个对象 一对多的关系 on // 发布的时候 会让数组的函数依次执行

    37520

    发布订阅模式,在工作中它的能量超乎你的想象

    ),当一个对象的状态发送改变时,所有依赖于它的对象都将得到状态改变的通知 正所谓,字数不多,不代表作用不大,那继续来看下它的作用 作用 广泛应用于异步编程中(替代了传递回调函数) 对象之间松散耦合的编写代码...所以我们要想实现一个自己的发布订阅模式,以后在工作中使用,也需要一点点来的,表捉急,先从最简单的说起 自定义事件 let corp = {}; // 自定义一个公司对象 // 这里放一个列表用来缓存回调函数...当发布的时候再把列表里存的函数依次执行 this.list.forEach(cb => { cb.apply(this, arguments); }); }; // 测试用例...,其实说起来也是比较简单的,来一起屡屡思路吧 思路: 创建一个对象(缓存列表) on方法用来把回调函数fn都加到缓存列表中 emit方法取到arguments里第一个当做key,根据key值去执行对应缓存列表中的函数...先来看看如何使用吧,来个测试用例看看 测试用例 / {'失恋', [findboy, drink]} // 监听的目的 就是为了构造这样一个对象 一对多的关系 on // 发布的时候 会让数组的函数依次执行

    60350
    领券