前言 本文主要讲解promise的链式调用的方法及其最终方案 应用场景 假如开发有个需求是先要请求到第一个数据,然后根据第一个数据再去请求第二个数据,再根据第二个数据去请求第三个数据...一直到最后得到真正想要的数据,我最初的做法是 setTimeout(() => { //这里用定时器来代替发请求 //data假设为后台来的数据 let data1 = 1; console.log(data1); setTimeout(() => { let data2 = 2 + data1; conso…
let a = new Promise((resolve,reject)=>{ resolve(1) }).then((r)=>{console.log(r)}).then(()=>{console.log(2)}).then(()=>{consol.log(3)}) // 1 // 2 // 3 let b = new Promise((resolve,reject)=>{resolve(1)}).then((r)=>{  return 3}).then((r)=&g…
Promise的使用相比大家已经孰能生巧了,我这里就不赘述了 先说说我写的Promise的问题吧,无法实现宏任务和微任务里的正确执行(也就是在Promise里面写setTimeout,setInterval的话,输出顺序会有问题),其他的API(catch.finally.race.all)有兴趣的话,大家可以斟酌补充. 开始贴代码: // 定义一个Promise类function Promise(fn){ // 回调队列 存放的所有的.then里面的回调 this.callbacks = []…
1.什么是Promise Promise 对象代表了未来将要发生的事件,用来传递异步操作的消息. 2.对象的状态不受外界影响.Promise 对象代表一个异步操作,有三种状态: pending: 初始状态,不是成功或失败状态,执行中的状态 fulfilled: 意味着操作成功完成. rejected: 意味着操作失败. 3.Promise 创建 new Promise(function(resolve, reject){   //异步处理  执行完成后调用resolve  执行失败调用 reje…
链模式 链模式是一种链式调用的方式,准确来说不属于通常定义的设计模式范畴,但链式调用是一种非常有用的代码构建技巧. 描述 链式调用在JavaScript语言中很常见,如jQuery.Promise等,都是使用的链式调用,当我们在调用同一对象多次其属性或方法的时候,我们需要多次书写对象进行.或()操作,链式调用是一种简化此过程的一种编码方式,使代码简洁.易读. 链式调用通常有以下几种实现方式,但是本质上相似,都是通过返回对象供之后进行调用. this的作用域链,jQuery的实现方式,通常链式调用…
链式调用实现原理:对象中的方法执行后返回对象自身即可以实现链式操作.说白了就是每一次调用方法返回的是同一个对象才可以链式调用. js简单实现链式调用demo Object.prototype.show = function() {   console.log('show');   return this;  }  Object.prototype.hide = function() {   console.log('hide');   return this;  }  var div = doc…
链式调用我们平常用到很多,比如jQuery中的$(ele).show().find(child).hide(),再比如angularjs中的$http.get(url).success(fn_s).error(fn_e).但这都是已经包装好的链式调用,我们只能体会链式调用带来的方便,却不知道形成这样一条函数链的原理是什么. 随着链式调用的普及,实现的方案也越来越多.最常见的,是jQuery直接返回this的方式,underscore的可选式的方式,和lodash惰性求值的方式.我们分别来了解,并…
这一章要实现的就是jQuery的那种链式调用,例子: $(this).setStyle('color', 'green').show(); 一:调用链的结构: 首先我们来看一下最简单的$()函数的实现: function $() { var elements = []; , len = arguments.length; i < len; ++i) { var element = arguments[i]; if (typeof element == 'string') { element =…
1.以$ 函数为例.通常返回一个HTML元素或一个元素集合. 代码如下: function $(){ var elements = []; ;i<arguments.length;i++){ var element = argument[i]; if(typeOf element == "String") { element = document.getElementById(element); } ) { return element; } elements.push(elem…
记录最近在项目设计中遇到的一个小问题. 前提:有这样两个POJO类,它们都可以通过链式调用的方式来设置其属性值,其中一个类继承了另一个类. 问题:通过链式调用,子类对象访问父类方法后,如何使返回对象仍是子类对象,仍然可以继续链式调用子类的方法? 结论:子类重写父类中需要被调用的方法.在子类重写的方法中,首先通过super关键字调用父类方法, 然后通过return this语句返回子类对象. 为了更具体.更形象的描述问题和解决办法,上示例代码. BaseOption.AppearanceOptio…