promise核心 为什么用promise
为什么要用promise
1.使用纯回调函数
先指定回调函数,再启动异步任务
答 1.指定回调函数的方式更加灵活
可以在执行任务前,中,后
2.支持链式调用,解决回调地狱问题
什么是回调地狱:回调函数嵌套使用,下一层回调函数依赖上一层回调函数的结果
解决方案。promise链式
终极解决方案 async/await
async function request() {
try {
const result = await dosongthing()
const newResult = await doThirdThing(result)
const finalResult = await doThirdThing2(newResult)
} catch (error) {
failureCallback(error)
}
}
如何使用promise?搞清楚语法(API:前后接口)
定一个函数,就是定义一个api。因为就是一个语法
1.Promise构造函数:Promise(excutor){}
excutor函数: 同步执行 (resolve, reject) => {}
resolve函数: 内部定义成功时候我们调用的函数 value => {}
reject函数: 内部定义失败时候我们调用的函数 reason => {}
说明: excutor会在Promise呢句立即同步调用,异步操作在执行器中执行
2.Promise.prototype.then方法 (onResolved,onRejected)=> {}
onResolved函数:成功时候回调的函数 (value)=> {}
onRejected函数:失败时候回调的函数 (reason)=> {}
返回一个新的promise对象 // 链式调用的一个前提
//内部函数异步执行
3.Promise.prototype.catch方法 (onRejected)=> {}
onRejected函数:失败时候回调的函数 (reason)=> {}
相当于then(null,onRejected)=> {}
new Promise((a, b) => {
setTimeout(() => {
// a('ok')
b('fail')
}, 0)
}).then(
value => {
console.log('onResolved1', value)
}
).catch(
reason => {
console.log('onReject', reason)
}
)
4.Promise.all方法 (promise)=> {}
promise: 包含n个promise的数组
//返回一个promise对象
三个请求都成功才有显示 成功
5.Promise.race方法 (promise)=> {}
promise: 包含n个promise的数组
只看第一个先执行完
promise核心 为什么用promise的更多相关文章
- promise核心6 自定义promise
1.定义整体结构(不写实现) 定义一个自己的promise的库 lib(库的简写) 一个js文件.一个js模块(不能用es6 也不能commjs)(用es5模块语法 ) 匿名函数自调用.IIFE ( ...
- Promise核心原理解析
作者: HerryLo 本文永久有效链接: https://github.com/AttemptWeb...... Promises对象被用于表示一个异步操作的最终完成 (或失败), 及其结果值.主要 ...
- Promise核心实现
核心 构造函数核心 维护状态变量,只能由pending变为resolve或者reject 维护一个存储结果的变量 维护一个回调数组,执行到then,如果我们传入的立即执行函数没有立即执行resolve ...
- promise 核心 几个小问题
1.如何改变pending的壮体 抛出异常.pending变为rejected // throw new Error('fail') 内部抛出异常也这样 reason为抛出的error resol ...
- Promise核心基础
基础 Promise 抽象表达:是js中进行异步编程的新的解决方案 具体解释:1.从语法上来说是一个构造函数 2.从功能上来说promise对象用来封装一个异步操作并可以获取其结果 状态改变:0.ne ...
- 手写一款符合Promise/A+规范的Promise
手写一款符合Promise/A+规范的Promise 长篇预警!有点长,可以选择性观看.如果对Promise源码不是很清楚,还是推荐从头看,相信你认真从头看到尾,并且去实际操作了,肯定会有收获的.主要 ...
- 到底什么是promise?有什么用promise怎么用
相信很多人刚接触promise都会晕,但学会后却离不开它,本文详细介绍一下promise,promise解决的问题,帮助新手快速上手 [扫盲] 什么是promise? promise是一种约定,并非一 ...
- 一步一步实现一个Promise A+规范的 Promise
2015年6月,ES2015(即ES6)正式发布后受到了非常多的关注.其中很重要的一点是 Promise 被列为了正式规范. 在此之前很多库都对异步编程/回调地狱实现了类 Promise 的应对方案, ...
- Promise.resolve( data)与Promise.reject( data )
Promise.resolve( data)与Promise.reject( data ) 常用来生成已经决议失败或成功的promise实例: 1.Promise.reject(data)不管传递的是 ...
随机推荐
- SQL*Loader-128: SQL*Loader-523
错误原因: SQL*Loader-128: unable to begin a sessionORA-01017: invalid username/password; logon denied 解决 ...
- python matplotlib绘图/sklearn包--make_blobs()
1.make_bolbs() 函数 from sklearn.datasets.samples_generator import make_blobs import numpy as np impor ...
- Golang的选择结构-if语句
Golang的选择结构-if语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.选择语句应用场景概述 选择结构也称为条件判断,生活中关于判断的场景也非常的多,比如: ()登录Q ...
- HDU 5504:GT and sequence
GT and sequence Accepts: 95 Submissions: 1467 Time Limit: 2000/1000 MS (Java/Others) Memory Limi ...
- 18.swoole学习笔记--案例
<?php //创建webSocket服务器 $ws=); //open $ws->on('open',function($ws,$request){ echo "新用户 $re ...
- Go语言 使用append() 为切片动态添加元素
Go语言的内建函数 append() 可以为切片动态添加元素.不过需要注意的是,在使用 append() 函数为切片动态添加元素时,如果空间不足以容纳足够多的元素,切片就会进行“扩容”,此时新切片的长 ...
- 死循环(endless loop)
死循环 死循环就是一个无法结束的循环.(endless loop / infinite loop) 出现死循环是因为没有设置好结束条件,循环的结束条件很重要,要充分考虑各种边界情况. 以上一篇随笔中的 ...
- 三十八、SAP设置默认语言
一.点击系统->用户参数文件->用户数据 二.设置成需要的语言 三.重新登录,并在登录时选择EN 四.进入界面
- Centos7安装rabbitMQ3.6.0
文章中的erlang和rabbitmq3.6.0 http://pan.baidu.com/s/1c2Nn64w Centos7 系统操作 cd /etc/yum.repos.d/ mv Cent ...
- 我们是如何将 ToB 服务的交付能力优化 75%?
ToB 服务交付的方式分为公有云部署和私有化部署两种.其中,对成本敏感的中小企业往往采用公有云部署的方式,从而尽量减少成本.客单价较高的大型企业.政府.银行和事业单位,考虑到数据隐私.安全.合规等要求 ...