项目开发中一些常用的es6知识,主要是为以后分享小程序开发、node+koa项目开发以及vueSSR(vue服务端渲染)做个前置铺垫。

项目开发常用es6介绍

  • 1、块级作用域 let const

  • 2、箭头函数及this指向

  • 3、promise、

  • 4、async await语法
  • 4、模块化 module export和import

  • 5、解构赋值、字符串模板

  • ……

Promise

Promise是什么?不妨直接打印出来看吧! 在浏览器控制台输入console.dir( Promise )回车会有惊喜。

// 大家在浏览器控制台输入console.dir( Promise )看一下哈!!!

可以看到Promise是一个构造函数,它跟JS中的Date、Array等构造函数类似,使用new操作符实例化之后就可以通过传参和调用方法的形式来完成某些特定的功能:

var date = new Date("2018-12-24 15:46:10");
date.getTime() //
date.getFullYear() //
date.getDate() //

同样,我们也需要使用new操作符来实例化Promise构造函数,与其他构造函数不同的是Promise接收一个函数作为参数。该函数又接收两个参数,分别是resolve和reject,resolve和reject也是函数(javascript内置的)且这两个函数都有各自不同的作用。 resolve函数的作用是:将Promise对象的状态从未完成变为成功(即从 pending 变为 resolved) reject函数的作用是:将Promise对象的状态从未完成变为失败(即从 pending 变为 rejected) 无论结果是成功还是失败,都可以将需要传递的参数通过该函数传递出去,以下是代码示例:

var promise = new Promise(function(resolve, reject) {
setTimeout(function() {
resolve("我是数据")
}, 1000)
}) var failExample = new Promise(function(resolve, reject) {
setTimeout(function() {
reject(new Error('我错了'))
}, 1000)
})

then方法

Promise 实例具有then方法,then方法的第一个参数是resolve(成功)的回调,第二个参数(可选)是reject(失败)的回调。

var promise = new Promise(function(resolve, reject) {
setTimeout(function() {
if (false) {
resolve("我是数据")
} else {
reject(new Error('我错了'))
}
}, 1000)
}) promise.then(function(data) {
console.log(data) // 我是数据 当if条件为真时触发
}, function(err) {
console.log(err) // Error: 我错了 当if条件为假时触发
})

使用箭头函数的话,代码会更简洁:

var promise = new Promise((resolve, reject) => {
setTimeout(() => {
false ? resolve("我是数据") : reject(new Error('我错了'))
}, 1000)
}) promise.then(
(data) => console.log(data),
(err) => console.log(err)
)

catch方法

catch方法和then的第二个参数一样,用来指定reject时的回调,用法是这样:

var promise = new Promise((resolve, reject) => {
setTimeout(() => {
false ? resolve("我是数据") : reject(new Error('我错了'))
}, 1000)
})
promise
.then(
(data) => console.log(data)
)
.catch(
(err) => console.log(err)
)

all方法

Promise.all方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。此方法提供了并行执行异步操作的能力,并且在所有异步操作执行完后才执行回调。举一个例子:开发中首页可能会有多个接口,如果写多个方法同时请求数据,很可能最终页面展示的时候会一块接一块显示出来就像是拼接完成的。通过Promise.all我们就可以将多个方法请求的数据同时展现出来:

var getData1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("1、接口1的数据")
}, 700)
}) var getData2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("2、接口2的数据")
}, 100)
}) var getData3 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("3、接口3的数据")
}, 300)
}) Promise.all(
[getData1, getData2, getData3]
).then((data) => {
console.log(data) // ["1、接口1的数据", "2、接口2的数据", "3、接口3的数据"]
})

上述代码可以看出all接收一个数组作为参数,数组成员分别是定义好的Promise实例,当所有的接口都成功时将按顺序把返回的结果放到一个数组里传给then方法。

race方法

Promise.race方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例。使用race方法时如果有一个率先成功,那么就立即返回。由此可见all和race的区别是: all方法的效果实际上是 “谁跑的慢,以谁为准执行回调”, race方法的效果实际上是 ”谁跑的快,以谁为准执行回调”

var getData1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("1、接口1的数据")
}, 700)
}) var getData2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("2、接口2的数据")
}, 1000)
}) var getData3 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("3、接口3的数据")
}, 300)
})
Promise
.race(
[getData1, getData2, getData3]
)
.then((data) => {
console.log(data)// 3、接口3的数据
})

Promise的出现主要是解决地狱回调的问题,比如有一个功能需要请求很多个接口,且每一个接口的参数都需要另外一个的接口返回的数据作为依赖,这样就需要我们一层嵌套一层,但是有了Promise 我们就无需嵌套,就可以使用then方法链式调用。

前端项目中常用es6知识总结 -- Promise逃脱回调地狱的更多相关文章

  1. 前端项目中常用es6知识总结 -- let、const及数据类型延伸

    项目开发中一些常用的es6知识,主要是为以后分享小程序开发.node+koa项目开发以及vueSSR(vue服务端渲染)做个前置铺垫. 项目开发常用es6介绍 1.块级作用域 let const  2 ...

  2. 前端项目中常用es6知识总结 -- 箭头函数及this指向、尾调用优化

    项目开发中一些常用的es6知识,主要是为以后分享小程序开发.node+koa项目开发以及vueSSR(vue服务端渲染)做个前置铺垫. 项目开发常用es6介绍 1.块级作用域 let const 2. ...

  3. 前端项目中常用es6知识总结 -- Async、Await让异步美如画

    项目开发中一些常用的es6知识,主要是为以后分享小程序开发.node+koa项目开发以及vueSSR(vue服务端渲染)做个前置铺垫. 项目开发常用es6介绍 1.块级作用域 let const 2. ...

  4. ES6系列之项目中常用的新特性

    ES6系列之项目中常用的新特性 ES6常用特性 平时项目开发中灵活运用ES6+语法可以让开发者减少很多开发时间,提高工作效率.ES6版本提供了很多新的特性,接下来我列举项目中常用的ES6+的特性: l ...

  5. 在Vue&Element前端项目中,对于字典列表的显示处理

    在很多项目开发中,我们为了使用方便,一般都会封装一些自定义组件来简化界面的显示处理,例如参照字典的下拉列表显示,是我们项目中经常用到的功能之一,本篇随笔介绍在Vue&Element前端项目中如 ...

  6. Android 项目中常用到的第三方组件

    项目中常用到的第三方组件 1 社会化分享ShareSDK-Core-2.5.9.jarShareSDK-QQ-2.5.9.jarShareSDK-QZone-2.5.9.jarShareSDK-Sin ...

  7. 项目中常用js方法整理common.js

    抽空把项目中常用js方法整理成了common.js,都是网上搜集而来的,大家一起分享吧. var h = {}; h.get = function (url, data, ok, error) { $ ...

  8. 记录下项目中常用到的JavaScript/JQuery代码二(大量实例)

    记录下项目中常用到的JavaScript/JQuery代码一(大量实例) 1.input输入框监听变化 <input type="text" style="widt ...

  9. 项目中常用的MySQL 优化

    本文我们来谈谈项目中常用的MySQL优化方法,共19条,具体如下: 一.EXPLAIN 做MySQL优化,我们要善用EXPLAIN查看SQL执行计划. 下面来个简单的示例,标注(1.2.3.4.5)我 ...

随机推荐

  1. POJ 1611 The Suspects 并查集 Union Find

    本题也是个标准的并查集题解. 操作完并查集之后,就是要找和0节点在同一个集合的元素有多少. 注意这个操作,须要先找到0的父母节点.然后查找有多少个节点的额父母节点和0的父母节点同样. 这个时候须要对每 ...

  2. 如何调试Blink?

    内容 尽管有很多工具和技巧可用于调试Blink,这个文章的重点调试Blink除布局測试之外的feature. 1 介绍 2 Linux 2.1 入门 2.2 启动Debugger 3 实用的工具 3. ...

  3. Python str 与 bytes 类型(Python2/3 对 str 的处理)

    本文均在 Python 3 下测试通过,python 2.x 会略有不同. 1. str/bytes >> s = '123' >> type(s) str >> ...

  4. django 笔记2

    默默坚持 :路由系统 URL :视图 request.GET request.POST request.FILES #checkbox等多选的内容 request.POST.getlist() #上传 ...

  5. nuxt 关闭ESlint 语法检测

    学习nuxt中在自己编写search组件的时候出现了各种类似于Expected indentation of 0 spaces but found 4的问题 上网搜是因为ESlint语法检测产生的问题 ...

  6. HTML中常用的部分标签(一)

    [常见的块级标签] 标题标签<h1></h1>...<h6></h6> 水平线<hr/> 段落<p></p> 换行& ...

  7. 《TensorFlow学习指南深度学习系统构建详解》英文PDF+源代码+部分中文PDF

    主要介绍如何使用 TensorFlow 框架进行深度学习系统的构建.涉及卷积神经网络.循环神经网络等核心的技术,并介绍了用于图像数据和文本序列数据的模型.给出了分布式深度学习系统在TensorFlow ...

  8. shell的结构化命令

    shell在逻辑流程控制这里会根据设置的变量值的条件或其他命令的结果跳过一些命令或者循环执行的这些命令.这些命令通常称为结构化命令 1.if-then语句介绍 基本格式 if command then ...

  9. b模式处理文件

    1.读 f=open('cheng','rb') date=f.read() print(date.decode()) 2.写 f=open('cheng','ab') f.write('chengz ...

  10. 【VC++学习笔记一】MFC操作Excel

    最近在做一个读取Excel的功能,之前也做过相关的,但总是零零闪闪的,趁着正在劲头上,归纳一下: 利用Automation添加相关的类,在Excel2010中可以在安装文件夹下直接点击Excel.ex ...