ES6新特性使用小结(六)
十三、promise 异步编程
①、使用 promise 模拟异步操作
{ //ES5 中的 callback 解决 异步操作问题
let ajax = function (callback) {
console.log('执行');
setTimeout(function () {
callback && callback.call();
}, 1000)
};
ajax(function () {
console.log('timeout1'); // '执行' 1s 后输出 ‘timeout1’;
})
} { //使用Promise 模拟负责异步操作
let ajax = function () {
console.log('aaa');
return new Promise(function (resolve, reject) {
setTimeout(function () {
resolve();
}, 1000)
})
}; ajax()
.then(function () {
console.log('bbb');
return new Promise(function (resolve, reject) {
setTimeout(function () {
resolve()
}, 2000)
})
})
.then(function () {
console.log('ccc');
})
}
②、promise 异常信息捕获
{
let ajax = function (num) {
console.log('执行');
return new Promise(function (resolve, reject) {
if (num > 5) {
resolve();
} else {
throw Error('出错啦');
}
})
}
ajax(6).then(function () {
console.log('log', 6)
}).catch(function (err) {
console.log('catch', err);
});
// 执行 'log',6
ajax(3).then(function () {
console.log('log', 3)
}).catch(function (err) {
console.log('catch', err);
});
// 执行 catch Error: 出错啦
}
③、promise使用场景DEMO 所有图片加载完毕后在添加到页面
/*
* Promise.all 方法
* 把多个Promise 实例 当成一个 Promise 实例
* 当所有的 Promise 实例状态发生改变的时候 ,新的Promise才会跟着发生变化
* */
{
function loadImg(src) {
return new Promise((resolve, reject) => {
let img = document.createElement('img');
img.src = src;
img.onload= function () {
resolve(img);
};
img.onerror= function () {
reject(err)
}
})
} function showImgs (imgs){ //三张图片作为一个实例
imgs.forEach(img=>document.body.appendChild(img))
} Promise.all([
loadImg('https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=3380917023,2961192652&fm=27&gp=0.jpg'),
loadImg('https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=3380917023,2961192652&fm=27&gp=1.jpg'),
loadImg('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1506432814385&di=26b606406cd0c7f50bac0c11c0d1a561&imgtype=0&src=http%3A%2F%2Fimg4.duitang.com%2Fuploads%2Fitem%2F201602%2F01%2F20160201065848_RUYHk.thumb.700_0.jpeg')
]).then(showImgs)
/*
* 三张图片所以的状态发生改变后,才会触发 Promise.all 返回一个实例触发 .then
* */
}
④、promise 使用场景二 三张图片同时加载 ,只要有一个图片加载完就添加到页面
/*
* Promise.race 方法
* 在多个实例中,有一个状态率先改变,race实例也会发生改变,其他的实例就不再响应
* */
{
function loadImg(src) {
return new Promise((resolve, reject) => {
let img = document.createElement('img');
img.src = src;
img.onload= function () {
resolve(img);
};
img.onerror= function () {
reject(err)
}
})
} function showImg(img){
let p = document.createElement('p');
p.appendChild(img);
document.body.appendChild(p);
} Promise.race([
loadImg('https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=3380917023,2961192652&fm=27&gp=0.jpg'),
loadImg('https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=3380917023,2961192652&fm=27&gp=1.jpg'),
loadImg('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1506432814385&di=26b606406cd0c7f50bac0c11c0d1a561&imgtype=0&src=http%3A%2F%2Fimg4.duitang.com%2Fuploads%2Fitem%2F201602%2F01%2F20160201065848_RUYHk.thumb.700_0.jpeg')
]).then(showImg)
}
ES6新特性使用小结(六)的更多相关文章
- ES6新特性使用小结(三)
九.数据类型 Symbol /* * Symbol 数据类型 概念: Symbol 提供一个独一无二的值 * */ { let a1 = Symbol(); let a2 = Symbol(); co ...
- ES6新特性使用小结(二)
六.Array 扩展 /* * Array Api Array.of 数组的构建 * */ { let arr = Array.of(, , , , , ); console.log(arr); // ...
- ES6新特性使用小结(四)
十一.Proxy .Reflect ①.Proxy 的概念和常用方法 { let obj = { //1.定义原始数据对象 对用户不可见 time: '2017-09-20', name: 'net' ...
- ES6新特性使用小结(一)
一.let const 命令 'use strict'; /*function test(){ //let a = 1; for(let i=1;i<3;i++){ console.log(i) ...
- ES6新特性使用小结(五)
十二.class 与 extends ①.类的基本定义和生成实例 { class Parent{ constructor(name='Lain'){ //定义构造函数 this.name = name ...
- ES6新特性概览
本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony( ...
- ES6新特性之模板字符串
ES6新特性概览 http://www.cnblogs.com/Wayou/p/es6_new_features.html 深入浅出ES6(四):模板字符串 http://www.infoq.c ...
- Atitit js版本es5 es6新特性
Atitit js版本es5 es6新特性 Es5( es5 其实就是adobe action script的标准化)1 es6新特性1 Es5( es5 其实就是adobe action scrip ...
- ES6新特性:Proxy代理器
ES6新特性:Proxy: 要使用的话, 直接在浏览器中执行即可, node和babel目前还没有Proxy的polyfill;,要使用的话,直接在浏览器中运行就好了, 浏览器的兼容性为:chrome ...
随机推荐
- oracle 11g 常用命令
sqlplus system/123@ORCL; 查看oracle字符集: select * from nls_database_parameters where parameter ='NLS_CH ...
- 作业2nd
1. 国内: 雷军作为中国互联网代表人物及环球年度电子商务创新首领人物,曾获中国经济年度人物及十大财智首领人物.中国互联网年度人物等多项国表里荣誉,并当选<福布斯>(亚洲版)2014年度贸 ...
- java自定义类型 作为HashMap中的Key值 (Pair<V,K>为例)
由于是自定义类型,所以HashMap中的equals()方法和hashCode()方法都需要自定义覆盖. 不然内容相同的对象对应的hashCode会不同,无法发挥算法的正常功能,覆盖equals方法, ...
- RabbitMQ的持久化机制
一.问题的引出 RabbitMQ的一大特色是消息的可靠性,那么它是如何保证消息可靠性的呢?——消息持久化.为了保证RabbitMQ在退出,服务重启或者crash等异常情况下,也不会丢失消息,我们可以将 ...
- bzoj 1510 [POI2006]Kra-The Disks——思路
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1510 #include<iostream> #include<cstdio ...
- Ubuntu环境下对拍
何为对拍 假设我在考场上写了一个能过样例的算法.然后它也能过大样例但是我觉得有些担心某些细节会出错,或者是它连大样例都过不了但是大样例过大无法肉眼差错,这个时候我们就需要对拍了. 所谓对拍,就是对着拍 ...
- poj3585树最大流——换根法
题目:http://poj.org/problem?id=3585 二次扫描与换根法,一次dfs求出以某个节点为根的相关值,再dfs遍历一遍树,根据之前的值换根取最大值为答案. 代码如下: #incl ...
- windows下VisualStudio和QtCreator搭建Qt开发环境
一.简介 集成开发平台IDE都有各自的长处,编写Qt程序可根据自己的喜好来选择相应的IDE.下述文章都是装载博友的文章,其中有很多细节还得自己调整. 二.详解 1.VisualStudio搭建Qt开发 ...
- JAVA基础知识 String s = new String("ABC") VS String s = "abc"
一: String s = new String("ABC") VS String s = "abc" String s = "abc&q ...
- DefaultTableCellRenderer 自定义
方式一: DefaultTableCellRenderer render = new DefaultTableCellRenderer(); render.setHorizontalAlignment ...