promise知识点小结
断断续续学习es6也有一段时间了,趁着开学空闲对知识点做一些小结。
为什么使用promise
谈到Promise,我们知道,这是社区较理想的异步编程解决方案。想要掌握promise,我们首先要知道其提出原因。promise的提出很好的解决了多个相互依赖的代码之间的嵌套问题,比如说C代码需要B代码的结果,B代码需要A代码的结果,用传统的方案,会出现层层嵌套的情况,不易维护。
promise对象是什么
promise对象一共有三种状态
- pending(进行中)
- fulfilled(已成功)
- rejected
promise对象有几种相关方法
let promise = new Promise((resolve,reject) => {
//....
resolve('2');
//....
//reject('4');
})
最简单创建对象的方法,就是为resolve和reject的状态分别传递参数,也就是成功后的信息或是失败时的提示,当然,不一定要两种状态同时都有。
then方法,接受两个参数,第一个为fulfilled状态下要进行的步骤,第二个参数可选,指的是rejected状态下执行的方法
当然,更推荐使用catch方法来定义错误状态下的方法,也和try...catch结构类似
promise
.then((data) => { //cb
// success
})
.catch((err) => {
// error
});
这个对象有几个特点,
1.比如状态一旦更改,就不会再发生变化,也就是说pending状态一旦转换成fulfuilled或rejected就不再变化了。
let promise = new Promise((resolve,reject) => {
resolve('2');
reject('4');
})
比如上面的代码,promise在进入fulfulled状态后就不再发生变化了,因此reject的操作是无效的。
2.比如promise对象创建中的代码是同步的,而then方法是异步的。
let promise = new Promise((resolve, reject) => {
console.log('1');
resolve('2');
});
promise.then((resolve,reject) => {
console.log(resolve);
})
console.log(3);
// 1 3 2
promise对象创建以后立即执行,故输出1,then方法为异步执行,被放入等待的实践队列,在本次事件循环结束时执行,故先打印3,最后打印2。
3.不会主动抛出错误
这一点比较特别,意味着我们必须定义catch方法或then的第二个参数来获取错误,不然,错误无法被发现
4.chain 链式结构
then函数的可以接另一个then函数,而then函数返回一个promise对象,因此,这一个promise对象就决定了执行后面的哪些方法
与promise相关的问题
then方法与settimeout
这一个问题非常典型,其实只要明白一点:settimeout在下一轮“事件循环”的时候开始执行,Promise.then()在本轮“事件循环”结束时执行。
setTimeout(function () {
console.log('1');
}, 0);
Promise.resolve().then(function () {
console.log('2');
});
console.log('3');
输出3 2 1
其实,这些方法,还是要多使用,多练习,才能得心应手
promise知识点小结的更多相关文章
- C++重要知识点小结---3
C++重要知识点小结---1:http://www.cnblogs.com/heyonggang/p/3246631.html C++重要知识点小结---2:http://www.cnblogs.co ...
- C++重要知识点小结---2
C++重要知识点小结--1 :http://www.cnblogs.com/heyonggang/p/3246631.html 1.C++允许程序员声明一个不能有实例对象的类,这样的类惟一的用途是被继 ...
- React及Nextjs相关知识点小结
React及Nextjs知识点小结 函数式组件和类组件区别是什么 1.函数式组件是用于创建无状态的组件,组件不会被实例化,无法访问this中的对象,无法访问生命周期方法,是无副作用的,相比于类组件函数 ...
- 【SpringBoot MQ 系列】RabbitMq 核心知识点小结
[MQ 系列]RabbitMq 核心知识点小结 以下内容,部分取材于官方教程,部分来源网络博主的分享,如有兴趣了解更多详细的知识点,可以在本文最后的文章列表中获取原地址 RabbitMQ 是一个基于 ...
- SpringBoot 系列教程之事务隔离级别知识点小结
SpringBoot 系列教程之事务隔离级别知识点小结 上一篇博文介绍了声明式事务@Transactional的简单使用姿势,最文章的最后给出了这个注解的多个属性,本文将着重放在事务隔离级别的知识点上 ...
- disruptor笔记之四:事件消费知识点小结
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- promise知识点汇总
Promise对象被写进ES6的规范当中,提供的是另外一种更加友好的对于异步编程的解决方案,在这之前大多使用的是回调函数和事件来实现异步编程. 怎么来理解Promise对象呢?对于这个ES6新加入的小 ...
- Vuejs技术栈知识点小结
前言 上家公司的项目主要是使用jQuery和Angular1,然后自己学了React,没想到来到这家公司突然开始做vue,不过vue还是挺容易上手的.下面是vue技术栈的一些总结,都是来自官网,主要是 ...
- shell知识点小结
目录 引言 shell中的数组 数组的定义 数组的使用 实际的例子 shell中大小的比较 shell中的括号 shell中函数的定义 杂项知识点 字符串转数组 常用判断标志 linux后台运行相关 ...
随机推荐
- Tableau 学习资料
官方文档: https://www.tableau.com/zh-cn/support/help 其他教程: tablaue破解版_tableau10 破解_tableau server 破解:htt ...
- 关于 DotNetCore 的自定义权限管理
1.自定义权限需要扩展 Microsoft.AspNetCore.Authentication 实现一套接口 IAuthenticationHandler, IAuthenticationSignIn ...
- BP神经网络(原理及MATLAB实现)
人工神经网络概述: 人工神经元模型: 神经网络的分类: 按照连接方式,可以分为:前向神经网络 vs. 反馈(递归)神经网络: 按照学习方式,可以分为:有导师学习神经网络 vs. 无导师学习神经网络: ...
- redis 在 php 中的应用(List篇)
本文为我阅读了 redis参考手册 之后编写,注意 php_redis 和 redis-cli 的区别(主要是返回值类型和参数用法) 目录: List(列表) LPUSH LPUSHX RPUSH R ...
- Spring的事务
事务:事务指的是逻辑上的一组操作,这组操作要么都成功,要么都失败. Transaction事务的四大特性ACID: 1.Atomicity原子性 事务的操作要么都成功,要么都不做,只要有一个失败,就会 ...
- linux查看服务器并发连接数
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(key in S) print key,"\t",S[key]}'
- IDEA 发布Api
1.修改Main方法 代码: public class AlicsbapiApplication extends SpringBootServletInitializer { @Override pr ...
- sql取整数
[四舍五入取整]select round(1.1,0) 执行结果为1: [向下取整]select floor(1.1) 执行结果为2: [向上取整] select ceiling(1.1) 执行结果为 ...
- KMP总结
首先给一个我能看懂的KMP讲解: http://blog.csdn.net/v_july_v/article/details/7041827 来自大神july 文章很长,但是慢慢看,会发现讲的很好. ...
- c++中的回调
一:设置一个函数指针,在需要使用的时候调用 #include <iostream> typedef void (__stdcall *DownloadCallback)(const cha ...