异步队列管理器

造这个轮子其实也是没得办法,搜不到合适的轮子用,就只能自己干了。使用场景我们有N个异步任务promise,他们没有顺序关系,谁先触发都无所谓,但是我们只关心一点,如果某一个任务出错,后续就不要运行了,只有全部都success完成,那么才运行成功后的处理方式then。当然,我们肯定不能使用Promise.all运行N个任务,这等于是同步触发了,如果我有2000个任务,难道你也一口气发2000个任务,那这就不现实了,所以这里我们要引入线程概念,一个进程可以有多个线程,那么进程就是管理器,线程就是我们一次可以发多少个请求。线程是可以配置的,我们可以指定触发多少个线程,当1个线程完成后,我们要填...

949 0 0

Iterator 和 for...of 循环

Iterator(遍历器)的概念JavaScript 原有的表示“集合”的数据结构,主要是数组(Array)和对象(Object),ES6 又添加了Map和Set。这样就有了四种数据集合,用户还可以组合使用它们,定义自己的数据结构,比如数组的成员是Map,Map的成员是对象。这样就需要一种统一的接口机制,来处理所有不同的数据结构。遍历器(Iterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。Iterator 的作用有三个:一是为各种数据结构,提供一个统一...

796 0 0

Promise

基本了解Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。Promise对象有以下两个特点。(1)对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfil...

709 0 0

Reflect

Reflect也是es6新增的api,他的出现主要是解决以下几点问题:将Object对象的一些明显属于语言内部的方法(比如Object.defineProperty),放到Reflect对象上修改Object对象的一些方法的返回结果,比如:Object.defineProperty(obj, name, desc)在无法定义属性时,会抛出一个错误,而Reflect.defineProperty(obj, name, desc)则会返回false。// 老写法 try { Object.defineProperty(target, property, attributes); //...

679 0 0

Proxy 代理

简介proxy用于修改某些操作的默认行为,由于是在语言层做出了修改,所以属于一种“元编程”,也可以理解为代理层,可以对外界的访问进行过滤改写。var proxy = new Proxy(target, handler);new 出Proxy,接收两个参数,一个是需要被代理的对象target,一个是代理的拦截器配置对象。var proxy = new Proxy({}, { get: function(target, propKey) { return 35; } }); proxy.time // 35 proxy.name // 35 proxy.title // 3...

794 0 0

Symbol

es6引入了一个新的数据类型Symbol,用于表示独一无二的值,他是JavaScript第七种数据类型。Symbol值通过Symbol函数生成,但是不需要new,用于解决属性名容易被人复写的问题。目前对象的属性名都是string类型,也就是字符串,现在新增了symbol类型,只要属性名是symbol类型,就是独一无二的,可以保证不会与其他属性名产生冲突。let s = Symbol(); typeof s //"symbol"基本使用Symbol函数接收一个字符串参数,表示对Symbol实例的描述,主要是为了再控制台显示,而且即便两个Symbol使用同一个字符串描...

803 0 0

Object 对象的扩展

属性的简写es6允许对属性进行简写,可以直接使用变量,变量名直接成为了属性名。var a = "hello"; var b = {a}; //等同于 var b = { a:a }属性里的方法也可以简写var a = { b(){...} } //等同于 var a = { b: function(){ ... } }在CommonJS模块输出变量时,也就是node模块导出时,这种简写就显得十分方便,我们直接导致一个对象,对象里面使用简写。var a = {}; var b = {}; module.exports = {a,b}而属性的赋...

1036 0 0

Array 数组扩展

扩展运算符console.log(...[1,2,3]); //1,2,3扩展运算符会将后面跟着的数组转换为参数序列,这种效果一般用于函数参数,数组操作里面。扩展运算符后面甚至可以接表达式,但是表达式一定要有数组抛出const arr = [...(x>0?[1]:[]),2];如果是一个空数组使用扩展运算符,则无任何效果const a = []; console.log([...a,1]); //[1]代替数组的apply方法首先要知道apply除了改变this的指向外,第二个参数是一个数组,apply会将这个数组转为序列参数。如:function test(x,y,z){ ...

699 0 0
Array 数组扩展

Function 函数

函数默认参数es5无法设置默认参数,只能通过函数内部先进行判断,如果没有参数则设置一个值。function test(x,y){ x = x || "hello "; y = y || "word"; console.log(x+y); } test(); //hello word这样写的话会有一个问题,就是如果我就要参数为空,就会出现问题test("","test"); // hello test所以我们还需要加一个判断function test(x,y){ x = typeof x...

795 0 0

关于es6 解构报错的一些经验

es6的解构非常好用,可以省去很多代码。为此我测试了一些场景的错误没有对应的keyconst {data} = {datas:"文本"};这种情况下,有值,但是key无法解析,那么就会返回undefined,也就是data输出是个undefined没有值const {data} =null;这种情况就会报错,这个报错会停止js的运行,所以我们需要用try--catch捕获key对应的值为nullconst {data} ={datas:null};这种情况也不会报错,他会把null拿到综合情况const {data,test} ={datas:null};这种情况并不...

1038 0 0
加载中