不同的是,调用 Generator 函数后,该函数并不执行,返回的也不是函数运行结果,而是一个指向内部状态的指针对象,也就是上一章介绍的遍历器对象(Iterator Object)。...它由社区最早提出和实现,ES6将其写进了语言标准,统一了用法,原生提供了Promise对象。 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。...只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。...这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。 有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。...,返回的是另一个Promise对象。
任何其他的操作无法改变状态的结果 Promise 对象的执行状态不可变。...then 的执行会返回一个新的 Promise 对象,并且如果 then 执行后返回的仍然是 Promise 对象,那么下一个 then 的链式调用会等待该 Promise 对象的状态发生变化后才会调用...语法中的 await 后可以是 Promise 对象或者原始数据类型对象、数字、字符串、布尔值等(此时会对其进行 Promise.resolve() 包装处理) 返回 Promise: async 函数的返回值是...: 调用 async 函数后返回的是一个 Promise 对象,通过 then 回调可以拿到 async 函数内部 return 语句的返回值 调用 async 函数后返回的 Promise 对象必须等待内部所有...对象处理后的结果,如果是原始数据类型,则直接返回原始数据类型 上述代码是阻塞式执行,nextPromise 需要等待 firstPromise 执行完成后才能继续执行,如果希望两者能够并发执行,则可以进行下述设计
购物车信息用一个数组来存储,数组中保存对象,对象中有id和count属性2. 在vuex中state中添加一个数据 cartList 用来保存这个数组3....for…of 是ES6新增的遍历方式,允许遍历一个含有iterator接口的数据结构(数组、对象等)并且返回各项的值,和ES3中的for…in的区别如下for…of 遍历获取的是对象的键值,for…in...它类似于数组,但是成员的值都是唯一的,没有重复的值。 Set 本身是一个构造函数,用来生成 Set 数据结构。...如果不是,会被转成一个立即resolve的 Promise 对象。 (4)返回值是 Promise。...async函数的返回值是 Promise 对象,这比 Generator 函数的返回值是 Iterator 对象方便多了。你可以用then方法指定下一步的操作。
5} 如果当前元素不为数组,result 保存结果 行 {6} 返回结果 /** * 数组降维 * @param { Array } arr * @returns { Array } 返回一个处理完成的数组...行 {8} 返回当前结果用户下次遍历 /** * 数组/对象数组去重 * @param { Array } arr 待去重的数组 * @param { String } name 如果是对象数组,...ES6 新的数据结构 Set,因为 Set 能保证集合中的元素是唯一的,可以利用这个特性,但是支持有限,对象数组这种就不支持咯 let arr = [1, 2, 2, 3, '3', 4]; [...new...接收函数作为参数的函数称为高阶函数,柯里化是高阶函数中的一种特殊写法。 函数柯里化是一把接受多个参数的函数转化为最初只接受一个参数且返回接受余下的参数返回结果的新函数。...是可以链式调用的,对于值穿透的场景要做判断,如果不传,则返回一个函数,也就是将上个结果进行传递 行 {9} then 方法必须返回一个 promise 对象 行 {10}、{11} 、{12} 也是 then
那为什么会出现这样的结果呢?计算机是通过二进制的方式存储数据的,所以计算机计算0.1+0.2的时候,实际上是计算的两个数的二进制的和。...判断传入上下文对象是否存在,如果不存在,则设置为 window 。处理传入的参数,截取第一个参数后的所有参数。将函数作为上下文对象的一个属性。使用上下文对象来调用这个方法,并保存返回结果。...判断传入上下文对象是否存在,如果不存在,则设置为 window 。将函数作为上下文对象的一个属性。判断参数值是否传入使用上下文对象来调用这个方法,并保存返回结果。...UTF-16 概念:UTF-16也是Unicode编码集的一种编码形式,把Unicode字符集的抽象码位映射为16位长的整数(即码元)的序列,用于数据存储或传递。...3)Promise缺点1、无法取消Promise,一旦新建它就会立即执行,无法中途取消。2、如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。
:所有 Promise 的状态都变化了,那么新返回一个状态是 fulfilled 的 Promise,且它的值是一个数组,数组的每项由所有 Promise 的值和状态组成的对象;如果有一个是 pending...它类似于数组,但是成员的值都是唯一的,没有重复的值。 Set 本身是一个构造函数,用来生成 Set 数据结构。...如果不是,会被转成一个立即resolve的 Promise 对象。 (4)返回值是 Promise。...async函数的返回值是 Promise 对象,这比 Generator 函数的返回值是 Iterator 对象方便多了。你可以用then方法指定下一步的操作。...严格地说,http 协议无法做到服务器主动推送信息。但是,有一种变通方法,就是服务器向客户端声明,接下来要发送的是流信息。也就是说,发送的不是一次性的数据包,而是一个数据流,会连续不断地发送过来。
()方法产生的Promise实例的返回值8、Promise.resolve()将现有对象转为Promise对象,如果该方法的参数为一个Promise对象,Promise.resolve()将不做任何处理...;如果参数thenable对象(即具有then方法),Promise.resolve()将该对象转为Promise对象并立即执行then方法;如果参数是一个原始值,或者是一个不具有then方法的对象,则...,会直接返回一个fulfilled状态的 Promise 对象。...9、Promise.reject()同样返回一个新的Promise对象,状态为rejected,无论传入任何参数都将作为reject()的参数2)Promise优点①统一异步 APIPromise 的一个重要优点是它将逐渐被用作浏览器的异步...== null;}这个函数只能判断 obj 是否是对象,无法判断其具体是数组还是对象。哪些操作会造成内存泄漏?
在JavaScript中,replace方法只能是替换字符串中匹配到的第一个实例字符,而不能进行全局多项匹配替换,唯一的办法是通过正则表达式进行相关规则匹配替换 而replaceAll则是返回一个全新的字符串...`输出结果: ${value}`)) .catch (err => console.log(err)) //输出 //输出结果:哎呀,她接受我了 再来看下另一种情况 Promise.any([...rejected Promise.any与Promise.race十分容易混淆,务必注意区分,Promise.race 一旦某个promise触发了resolve或者reject,就直接返回了该状态结果...,所以WeakMap、WeakSet的键值对是不可枚举的 WeakSet和WeakMap相似,但是每个对象在WeakSet中的每个对象只可能出现一次,WeakSet中所有对象都是唯一的 let ws =...,集合中对象引用为弱引用,如果没有其他对WeakSet对象的引用,则会被GC回收 最后,WeakRef实例有一个方法deref,返回引用的原始对象,如果原始对象被回收,则返回undefined const
,作为唯一一个修改promise对象状态的地方,其中factory函数的入参resolve的作用是将promise对象的状态从pending转换为fulfilled,而reject的作用是将promise...两者的返回值均作为Promise对象单向链表中下一个Promise对象的状态转换事件处理函数的入参。而then方法的返回值是一个新的Promise对象并且已添加到Promise对象单向链表的末尾。...五、通过示例看特性 单看接口API是无法掌握Promise/A的特性的,下面通过示例说明: 示例1——链式操作+执行最近的事件处理函数 // 创建...上述的示例1表明Promise是具有链式操作,因此Promise的内部结构应该是一个单向链表结构,每个节点除了自身数据外,还有一个字段用于指向下一个Promise实例。...由于源码中加入性能优化的代码,因此我提出核心逻辑以便分析: // 将非thenable对象构造为thenable对象 // 其then方法则返回一个真正的Promise对象 function ValuePromise
描述:等到所有promise都返回结果,就返回一个promise实例。...return '我是finally2返回的值' }) .then(res => { console.log('finally2后面的then函数', res) })输出结果如下:1finally2finallyfinally2...也就是说你在.finally()函数中是无法知道Promise最终的状态是resolved还是rejected的它最终返回的默认会是一个上一次的Promise对象值,不过如果抛出的是一个异常则返回异常的...//vue中购物车逻辑的实现1. 购物车信息用一个数组来存储,数组中保存对象,对象中有id和count属性2. 在vuex中state中添加一个数据 cartList 用来保存这个数组3....如果对象中存在循环引用的情况也无法正确实现深拷贝;说一下常见的检测数据类型的几种方式?
(2)Fetch fetch号称是AJAX的替代品,是在ES6出现的,使用了ES6中的promise对象。Fetch是基于promise设计的。Fetch的代码结构比起ajax简单多。...: 浏览器端发起XMLHttpRequests请求 node端发起http请求 支持Promise API 监听请求和返回 对请求和返回进行转化 取消请求 自动转换json数据 客户端支持抵御XSRF攻击...name' // console.log(age); //'我是参数传进来的age' // console.log(this); //构造函数this指向实例对象 // } // // 构造函数原型的方法...恶意代码窃取⽤户数据并发送到攻击者的⽹站,或者冒充⽤户的⾏为,调⽤⽬标⽹站接⼝执⾏攻击者指定的操作。 这种攻击常⻅于带有⽤户保存数据的⽹站功能,如论坛发帖、商品评论、⽤户私信等。...或 .catch 返回的值不能是 promise 本身,否则会造成死循环。
它类似于数组,但是成员的值都是唯一的,没有重复的值。 Set 本身是一个构造函数,用来生成 Set 数据结构。...async函数的返回值是 Promise 对象,这比 Generator 函数的返回值是 Iterator 对象方便多了。你可以用then方法指定下一步的操作。...finally()方法不管Promise对象最后的状态如何都会执行 .finally()方法的回调函数不接受任何的参数,也就是说你在.finally()函数中是无法知道Promise最终的状态是resolved...还是rejected的 它最终返回的默认会是一个上一次的Promise对象值,不过如果抛出的是一个异常则返回异常的Promise对象。...并且结果和函数的执行顺序是一致的。 Promise.race 描述:只要promises中有一个率先改变状态,就返回这个率先改变的Promise实例的返回值。
result:{sum: 3}//返回结果 } 2、使用云数据库 1、使用云数据库前置条件 参照上一步的云函数,写一个获取用户openid的方法,以下为示例 const cloud = require...//调用失败 console.log(err); }); 4、调用成功返回结构和数据库结果 {//返回结果 errMsg: "collection.add:ok",//成功状态码 _id:...,//这里是你自己保存的数据 } 3、使用云储存 1、文件上传(以图片上传为例) //选择图片(必须使用回调方式,不返回promise对象) wx.chooseImage({ count:1,//最多选择一张...$/)[0]; wx.cloud.uploadFile({//开始上传文件(返回promise对象,如果写了任意回调函数作为参数,则不返回) cloudPath,...删除云函数比较麻烦,需要去云控制台删除后再返回代码右键删除本地入口。 微信云开发因为是比较新兴的产品,所以基本方法都返回promise对象,请后续使用await和asnyc增加代码可读性。
简单说Promise 就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。...有三种状态,pending(进行中)、resolved(已完成)、rejected(已失败),特点是只有异步操作的结果,可以决定当前是哪一种状态,状态一旦改变,就无法再次改变状态; Promise常用的方法...,返回最先执行结束的 Promise 任务的结果,不管这个 Promise 结果是成功还是失败; (4)all:如果全部成功执行,则以数组的方式返回所有 Promise 任务的执行结果,如果有错误就返回...有人要问既然有了很多的Promise对象那么多的then,那么我需不需要写很多catch来捕获错误呢? 答案当然是:不需要!...alert(1) }, 3000) console.log('“我等一会”上面的程序执行完我在打印'); return '我是返回值'; } //async的返回值不管是什么类型本质是一个
在JavaScript中,replace方法只能是替换字符串中匹配到的第一个实例字符,而不能进行全局多项匹配替换,唯一的办法是通过正则表达式进行相关规则匹配替换 而replaceAll则是返回一个全新的字符串...`输出结果: ${value}`)) .catch (err => console.log(err)) //输出 //输出结果:哎呀,她接受我了 再来看下另一种情况 Promise.any([ Promise.reject...与Promise.race十分容易混淆,务必注意区分,Promise.race 一旦某个promise触发了resolve或者reject,就直接返回了该状态结果,并不在乎其成功或者失败 WeakRefs...,所以WeakMap、WeakSet的键值对是不可枚举的 WeakSet和WeakMap相似,但是每个对象在WeakSet中的每个对象只可能出现一次,WeakSet中所有对象都是唯一的 let ws =...,集合中对象引用为弱引用,如果没有其他对WeakSet对象的引用,则会被GC回收 最后,WeakRef实例有一个方法deref,返回引用的原始对象,如果原始对象被回收,则返回undefined const
其中 message 属性是唯一一个能够保证所有浏览器都支持的属性,除此之外,IE、Firefox、Safari、Chrome 以及 Opera 都为事件对象添加了其它相关信息。...此时 catch 块会接收到一个包含错误信息的对象,这个对象中包含的信息因浏览器而异,但共同的是有一个保存着错误信息的 message 属性。...实际上返回 "做作业",因为最后还有 finally 子句,结果就会导致 try 块里的 return 语句被忽略,也就是说调用的结果只能返回 "做作业"。...try-catch 的场景: try { JSON.parse(remoteData); // remoteData 为服务端返回的数据 } catch { console.error("服务端数据格式返回异常...错误了"); console.log("错误的原因是", e.reason); console.log("Promise 对象是", e.promise); return true; })
3.拦截器:请求拦截 响应拦截 请求拦截:因为http是无状态的 无法保存我们的状态,那么我们就需要一个标识 当我们登录之后,后续的所有请求操作都需要携带我们这个token,所以我们统一把它添加到请求头当中...之后再进行渲染 5.axios的封装 为了方便使用我们进行了封装 首先我们封装一个get或者post的这些方法,然后通过返回一个promise对象进行使用 在promise中通过.then和.catch...拿到axios请求结果 然后通过工具层将不同的业务版块需要调用的接口进行模块化再暴露出去 在我们的但页面中引入相对于的接口模块,然后调用,因为我们底层封装的是一个promise对象 所以我们可以通过...(必背) 创建一个空对象 this指向这个对象 给这个对象添加属性和方法 返回这个对象 47.什么是同源(必背) 答: 同源就是两个页面有相同的协议 域名 端口 就属于同源 其中只要一个不同就不同源 48...promise对象提供两个方法 resolve 和 reject 那么需要拿到他们的结果 就需要用到promis对象下的then和carch 49.JS作用域和变量提升?
const其实保证的不是变量的值不变,而是保证变量指向的内存地址所保存的数据不允许改动。...而复杂类型object,array,function,变量指向的内存地址其实是保存了一个指向实际数据的指针,所以const只能保证指针是固定的,至于指针指向的数据结构变不变就无法控制了 解构赋值 ES6...前后两个kay需对应 Symbol ES6引入了一种新的原始数据类型Symbol,表示独一无二的值,最大的用法是用来定义对象的唯一属性名。...对象 Promise是异步编程的一种解决方案 从语法上说,Promise 是一个对象,从它可以获取异步操作的消息 Promise异步操作有三种状态:pending、fulfilled和rejected...除了异步操作的结果,任何其他操作都无法改变这个状态。
promise.then()返回的新promise的结果状态由回调函数的返回值决定 then没有返回值 在then回调函数中抛出异常 返回值是字符串,null等 返回值是一个promise对象 串联多个任务...如果都成功了,返回的结果就是所有promise对象的结果数组集合 其中有一个promise对象失败了,那么返回的结果集就是失败的promise对象的结果集 ---- promise的race方法...); }) console.log(ret); 返回的结果就是大忽悠 只要返回值不是一个promise对象,那么返回的promise对象的状态就永远是成功状态,抛异常除外 ---- 返回值是一个promise...(ret); 返回的结果对应的是返回的promise对象的结果,状态也对应返回的promise对象的状态 ---- 串联多个任务 const p=new Promise((reslove,reject...await 和then回调方法返回规则一致 当返回非promise对象时,返回值就为对应的非promise类型数据 如果返回promise类型对象,那么返回结果和状态就由返回的promise对象来决定
;在旧浏览器页面在向服务器请求数据时,因为返回的是整个页面的数据,页面都会强制刷新一下,这对于用户来讲并不是很友好;我们只是需要修改页面的部分数据,但是从服务器端发送的却是整个页面的数据,十分消耗网络资源...发送请求体数据xhr.send(userStr)PromisePromise是异步编程的一种解决方案: 它代表了一个异步操作的最终完成(或失败)及其结果值简单来说,Promise是一个容器,里面保存着某个未来才会结束的事件...(通常是一个异步操作)的结果Promise逻辑更清晰,是axios 函数内部运作的机制,主要用来解决回调地狱:Promise 管理异步任务,语法:创建Promise对象: new Promise; 构造函数是...Promise 的状态Promise对象的状态是对异步操作的描述,Promise对象有三种状态:待定(pending):这是Promise创建后的初始状态,在这个状态下,异步操作还没有完成,也没有失败...链式解决回调地狱:概念:依靠 then() 方法会返回一个新生成的 Promise 对象特性,继续串联下一环任务,直到结束细节:then() 回调函数中的返回值,会影响新生成的 Promise 对象最终状态和结果每个
领取专属 10元无门槛券
手把手带您无忧上云