先看看ES5中异步编程的使用。

 let ajax = function (callBlack) {
setTimeout(function () {
callBlack && callBlack()
}, 1000);
}
ajax(function () {
console.log(1)
});

在ES6中使用Promise来解决异步编程。

 let ajax = function () {
return new Promise(function (reslove, reject) {
setTimeout(function () {
reslove()
}, 1000);
})
}
ajax().then(function () {
console.log(1);
})

有多个步骤,让异步编程更加简单。

 let ajax = function () {
return new Promise(function (reslove, reject) {
setTimeout(function () {
reslove()
}, 1000);
})
}
ajax().then(function () {
console.log(1);
return new Promise(function (reslove, reject) {
setTimeout(function () {
reslove()
}, 2000);
})
}).then(function () {
console.log(2)
});

在Promise中可以使用catch来捕获异常。

 let ajax = function (num) {
return new Promise(function (reslove, reject) {
if (num > 1) {
reslove();
return;
}
throw new Error("错误");
})
}
ajax(0).then(function () {
console.log("正确");
}).catch(function (err) {
console.log(err);
});

下面是一个案例,目的是当页面的图片都加载完才把图片显示到页面中,如果其中有一个出错了就不显示。

 function loading(src) {
return new Promise((resolve, reject) => {
let img = document.createElement("img");
img.src = src;
img.onload = function () {
resolve(img);
};
img.onerror = function (err) {
reject(err)
}
})
} function showimg(imgs) {
imgs.forEach(function (img) {
document.body.appendChild(img);
});
}
Promise.all([
loading("./img/banner01.jpg"),
loading("./img/banner02.jpg")
]).then(showimg);

下面这个例子是当图片先加载的先显示出来,没加载的就不再显示了。

 function loading(src) {
return new Promise((resolve, reject) => {
let img = document.createElement("img");
img.src = src;
img.onload = function () {
resolve(img);
};
img.onerror = function (err) {
reject(err)
}
})
} function showimg(imgs) {
let p = document.createElement("p");
p.appendChild(imgs)
document.body.appendChild(p);
}
Promise.race([
loading("./img/banner01.jpg"),
loading("./img/banner02.jpg")
]).then(showimg);

ES6中promise的使用方法的更多相关文章

  1. 对于ES6中Promise的个人见解

    1.js中常见的异步 JavaScript可以响应用户的一些异步交互,比如单击鼠标和按键盘等操作. let button = document.getElementById("btn&quo ...

  2. ES6中Promise对象个人理解

    Promise是ES6原生提供的一个用来传递异步消息的对象.它减少了传统ajax金字塔回调,可以将异步操作以同步操作的流程表达出来使得代码维护和可读性方面好很多. Promise的状态: 既然是用来传 ...

  3. ES6 中 Promise

    在说Promise之前我们先简单说一下什么是同步异步? 同步(Sync):所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或继续执行后续操作. 异步(Async):异步与同步相对, ...

  4. ES6中Promise的入门(结合例子)

    一.Promise的前言 解决回调地狱 //以往回调方式 函数1(function(){ //代码执行...(ajax1) 函数2(function(){ //代码执行...(ajax2) 函数3(f ...

  5. ES6中promise总结

    一.什么是ES6的Promise 讲太多也没有.直接在打印出来就好,console.dir(Promise) Promise 是一个构造函数,自身有all, reject, resolve 这几个眼熟 ...

  6. ES6 中 Promise 详解

    Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获取异步操作的消息.Promise 提供统一的 API ...

  7. ES6中Promise详解

    Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获取异步操作的消息. Promise 提供统一的 AP ...

  8. ES6中字符串的新增方法梳理

    1.String.fromCodePoint(); String,fromCodePoint()方法可以认为是对String.fromCharCode()方法的扩展,这两个方法的共同点在于都是用于Un ...

  9. 在ES5实现ES6中的Object.is方法

    ES6中对象的扩展里面添加了一个Object.is方法,用于比较两个值是否严格相等.内部计算与 === 行为基本一致.那么我们怎么在不支持这个方法的ES5中实现呢? 首先我们需要搞清楚两点,1:Obj ...

随机推荐

  1. 阅读MDN文档之基本盒模型(三)

    Box properties Margin collapsing Adjacent siblings(相邻兄弟) Parent and first/last child Empty blocks Ac ...

  2. Oracle添加记录的时候报错:违反完整性约束,未找到父项关键字

    今天需要向一个没有接触过的一个Oracle数据库中添加一条记录,执行报错: 分析: 报错的根本原因:未找到父项关键字的原因是因为你在保存对象的时候缺失关联对象. 问题的解决思路:先保存关联对象后再保存 ...

  3. Ajax 的用法

    1.什么是 Ajax? Ajax,英文名 Asynchronous JavaScript and XML,也就是异步的 JavaScript 和 XML.它不是一门新的语言,而是一种使用现有标准的新方 ...

  4. sql存储过程中使用 output

    1.sql存储过程中使用 output CREATE PROCEDURE [dbo].[P_Max] @a int, -- 输入 @b int, -- 输入 @Returnc int output - ...

  5. Git操作流程,基本命令演示

    任务列表: 有一个中央库Center,和三个工作站A,B,C. 初始化时,代码存放在中央库中,A,B,C三个工作站开始工作之前都要首先从中央库克隆一份代码到本地. 第一个任务:A和B合作修复一个缺陷, ...

  6. 教你如何安装配置Windows7系统 IIS IIS7.5本地浏览测试网站 完整版介绍

    大家都知道网站建设前期测试于浏览网站都喜欢用iis本地浏览来操作 那么为了方便大家自己来安装和配置Internet信息服务 相信大家,对于Windows 7有了相应的了解,从操作上,使用上,内置功能上 ...

  7. 讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(下)- block中任性用self

    前言: 在处理完框架内存泄漏的问题后,见上篇:讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(中)- IOS不为人知的Bug 发现业务代码有一个地方的内存没释放,原因很也简单: ...

  8. UIViewController生命周期控制-开发规范

    从网上各位iOS们收集并总结: 各方法使用: init 中初始化一些UI组件,比如UIButton,UILabel等 loadView 中 createFields 接受参数,初始化变量 create ...

  9. sqoop数据迁移(基于Hadoop和关系数据库服务器之间传送数据)

    1:sqoop的概述: (1):sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具.(2):导入数据:MySQL,Oracle导入数据到Hadoop的HDFS.HIV ...

  10. Unity3d 协程

    参考文章: http://blog.csdn.net/onafioo/article/details/48979939 http://www.cnblogs.com/zhaoqingqing/p/37 ...