熟悉而陌生API:Promise
前言
陌生情景一:怎么和循环结合
// 我想将数组下的每个元素都执行一个函数
fetchSomeData().then((res) => {
res.data.forEach((item) => {
doSomethingFunction(item);
})
}).then(res => {
// 做其他事
})
Promise.all()
fetchSomeData().then(res) => {
return Promise.all(res.data.map(item) => {
return doSomethingFunction(item);
})
}).then(res => {
// 做其他事
})
陌生情景二:没有return
fetchSomeData().then((res) => {
doSomethingFunction(res);
}).then(res => {
// 做其他事
})
- return 另一个Promise
- return 一个值
- throw 一个错误
返回一个Promise
fetchSomeData().then((res) => {
return getId(res);
}).then(res => {
// 我能得到id
})
返回一个值
fetchSomeData().then((res) => {
if (idCache[id]) {
return idCache[id];
}
return getId(res);
}).then(res => {
// 我能得到id
})
throw error
fetchSomeData().then((res) => {
if (logout) {
throw new Error('用户已登出');
}
if (idCache[id]) {
return idCache[id];
}
return getId(res);
}).then(res => {
// 我能得到id
}).catch(err=> {
// 做错误处理
})
陌生情景三:不知道Promise.resolve()与Promise.reject()
new Promise((resolve, reject) => {
resolve(doSomething())
}).then(...)
Promise.resolve
Promise.resolve(doSomething()).then(...)
Promise.reject
Promise.reject(new Error('some error'))
陌生情景四:then().catch()与then(resolveHandler, rejectHandler)傻傻分不清楚
promise().catch(err => {
// 处理错误
})
promise().then(null, err => {
// 处理错误
})
promise().then((res) => {
return otherPromise(res);
}).cathc(err => {
// 能捕获得到错误
})
promise().then(res => {
return otherPromise(res);
}, err => {
// 不能捕获得到错误
})
陌生情景五:如何依次执行一系列的promise
function execute(promises) {
var result = Promise.resolve();
promise.forEach(promise => {
result = result.then(promise);
});
return result;
}
function execute(promiseFactories) {
var result = Promise.reslove();
promiseFactories.forEach(promiseFactory => {
result = result.then(promiseFactory);
});
return result;
}
function promiseFactory() {
return promiseCreated();
}
陌生情景六:then方法的使用
Promise.resolve('foo').then(Promise.resolve('bar')).then((res) => {
console.log(res);
})
Promise.resolve('foo').then(null).then(res => {
console.log(res) // foo
})
Promise.resolve('foo').then(() => {
return Promise.resolve('bar')
}).then(res => {
console.log(res); // bar
})
总结
作者:Nolan Lawson链接: 熟悉而陌生API:Promise来源:github
熟悉而陌生API:Promise的更多相关文章
- Python : 熟悉又陌生的字符编码(转自Python 开发者)
Python : 熟悉又陌生的字符编码 字符编码是计算机编程中不可回避的问题,不管你用 Python2 还是 Python3,亦或是 C++, Java 等,我都觉得非常有必要厘清计算机中的字符编码概 ...
- Axios & fetch api & Promise & POST
Axios & fetch api & Promise & POST https://github.com/axios/axios https://appdividend.co ...
- NSUserDefaults:熟悉与陌生(转)
转载自:http://swiftcafe.io/2016/04/04/nsuserdefaults/?hmsr=toutiao.io&utm_medium=toutiao.io&utm ...
- 熟悉而陌生的新朋友——IAsyncDisposable
本文作者--句幽 在.NET Core 3.0的版本更新中,官方我们带来了一个新的接口 IAsyncDisposable. 小伙伴一看肯定就知道,它和.NET中原有的IDisposable接口肯定有着 ...
- 第三讲:ifconfig:最熟悉又陌生的命令行
你知道怎么查看IP地址吗? 当面试听到这个问题的时候,面试者常常会觉得走错了房间.我面试的是技术岗位啊,怎么问这么简单的问题? 的确,即便没有专业学过计算机的人,只要倒腾过电脑,重装过系统,大多也会知 ...
- 那些熟悉又陌生的 css2、css3 样式,持续复习
initial关键字: 除了 Internet Explorer,其他的主流浏览器都支持 initial 关键字. Opera 15 之前的版本不支持 initial 关键字. initial ...
- 3(计算机网络)ifconfig:最熟悉又陌生的命令行
当面试听到这个问题的时候,面试者常常会觉得走错了房间.我面试的是技术岗位啊,怎么问这么简单的问题? 的确,即便没有专业学过计算机的人,只要倒腾过电脑,重装过系统,大多也会知道这个问题的答案:在 Win ...
- 趣谈网络协议-第3讲 | ifconfig:最熟悉又陌生的命令行
如何查看IP地址呢? windows 查看IP地址命令 IPCONFIG LINUX 查看IP 命令 IFCONFIG IP ADDR ifconfig 和ADDR的区别 这是一个 ...
- 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理
[微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...
随机推荐
- Spring中的注解@Value("#{}")与@Value("${}")的区别
1 @Value("#{}") SpEL表达式 @Value("#{}") 表示SpEl表达式通常用来获取bean的属性,或者调用bean的某个方法.当然还有可 ...
- sql中筛选条件为空值
<select id="getEmployeeBasicInformationList" resultType="org.springblade.entity.Al ...
- Java对象赋值与引用
当需要创建多个相同类型的对象且有某些字段的值是相同的,如果直接 get,set 的话,属性多的时候代码会很长,于是乎,以下代码产生了( java 基础差没搞清楚赋值与引用) 复制代码 1 User u ...
- 对于home主页的切换处理
经过测试,发现,在home首页的时候,滑动到某一个位置的时候,如果再点击tabbar中的"购物车"."分类"或者"我的"的时候,再点击到首页 ...
- 基于E-PUCK 2.0多智能体自主协同 高频投影定位系统
群体智能机器人是一种国际前沿的人工智能研究项目,由多个小型机器人组成的集群式解决系统,灵感源于蚂蚁.蜜蜂.鱼等群体生物,在没有统一领导的情况下,也能合作执行大量复杂的任务,比如组建一个图形,再在此基础 ...
- 第十五章节 BJROBOT cartographer 算法构建地图【ROS全开源阿克曼转向智能网联无人驾驶车】
建地图前说明:请确保你的小车已经校正好 IMU.角速度.线速度,虚拟机配置好 ROS 网络的前提进行,否则会造成构建地图无边界.虚拟机端无法正常收到小车主控端发布的话题数据等异常情况!! 1.把小车平 ...
- 8. 格式化器大一统 -- Spring的Formatter抽象
目录 ✍前言 本文提纲 版本约定 ✍正文 Printer&Parser Formatter 时间日期格式化 Date类型 代码示例 JSR 310类型 整合DateTimeFormatter ...
- 基于LDAP&&Role-based Authorization Strategy实现Jenkins团队权限管理
在实际工作中,存在多个团队都需要Jenkins来实现持续交付,但是又希望不同团队之间进行隔离,每个项目有自己的view, 只能看到自己项目的jenkins job. 但是,jenkins默认的权限管理 ...
- Openstack 启动一个实例(九)
Openstack 启动一个实例(九) 创建一个提供者网络: # 创建一个提供者网络: openstack network create --share --external --provider-p ...
- 基于numpy.einsum的张量网络计算
张量与张量网络 张量(Tensor)可以理解为广义的矩阵,其主要特点在于将数字化的矩阵用图形化的方式来表示,这就使得我们可以将一个大型的矩阵运算抽象化成一个具有良好性质的张量图.由一个个张量所共同构成 ...