ECMA Script 6_异步编程之 Promise
Promise 对象
异步编程 方案,已同步的方式表达异步的代码,解决回调地狱的问题
比传统的解决方案——回调函数和事件——更合理和更强大
是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。
从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。
Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理
- 基本使用
const promise = new Promise(function(resolve, reject) {
// ... some code if (/* 异步操作成功 */){
resolve(value);
} else {
reject(error);
}
}); promise
.then(
()=>{
console.log('成功的回调');
},
()=>{
console.log('失败的回调');
},
);
console.log('主线程执行完了'); /**** 等同于 ****/
const promise = new Promise((resolve, reject)=>{
/*
resolve 解决 成功 将 Promise 对象的状态 由初始化变成成功
reject 拒绝 失败 将 Promise 对象的状态 由初始化变成失败 Promise 三种状态
初始化状态
成功状态
失败状态
*/
setTimeout(function(){
const result = 202;
console.log('请求成功了');
resolve(result); // 触发成功的回调
}, 1000);
}); promise.then(result=>{
console.log('成功的回调'+result);
}).catch((result)=>{
console.log('失败的回调'+result);
});
console.log('主线程执行完了');- Promise.resolve() 和 Promise.reject() 创建对象,状态为 成功 和 失败
- Promise.all([要检测的对象数组]); // 在所有的 promise 都触发 resolve 回调,才会成功。
- 成功时接收 resolve ,失败只接收 reject。结果为数组
- 实例
/**** 简单 独立异步任务 ****/
const a = new Promise((resolve, reject)=>{
setTimeout(function(){
resolve("成功!");
}, 1000);
}); const aa = new Promise((resolve, reject)=>{
setTimeout(function(){
resolve("成功!");
}, 2000);
}); const aaa = new Promise((resolve, reject)=>{
setTimeout(function(){
resolve("成功!");
}, 3000);
}); Promise.all([a, aa, aaa]).then(result=>{
console.log(result); // 接收到数组是 每个 Promise 发送过来的结果
}).catch(result=>{
console.log(result);
}); console.log('主线程执行完了!'); /**** 复杂 分线程关联任务 ****/
const b = new Promise((resolve, reject)=>{
setTimeout(function(){
console.log("Done1"+"First");
resolve("Done1"+"First");
}, 1000);
}); b.then(result=>{
return new Promise((resolve, reject)=>{
setTimeout(function(){
console.log("Done2"+result);
resolve("Done2"+result);
}, 2000);
});
}).catch()
.then(result=>{
return new Promise((resolve, reject)=>{
setTimeout(function(){
console.log("Done3"+result);
resolve("Done3"+result);
}, 3000);
});
}).catch()
.then(result=>{
console.log("All Done!"+result);
}).catch() console.log('主线程执行完了!');
ECMA Script 6_异步编程之 Promise的更多相关文章
- 异步编程之Promise(3):拓展进阶
异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...
- 异步编程之Promise(2):探究原理
异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...
- (翻译)异步编程之Promise(1):初见魅力
原文:https://www.promisejs.org/ by Forbes Lindesay 异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2) ...
- 前端异步编程之Promise和async的用法
传统的异步解决方案采用回调函数和事件监听的方式,而这里主要记录两种异步编程的新方案: ES6的新语法Promise ES2017引入的async函数 Generator函数(略) Promise的含义 ...
- JavaScript的异步编程之Promise
Promise 一种更优的异步编程统一 方法,如果直接使用传统的回调函数去完成复杂操作就会形成回调深渊 // 回调深渊 $.get('/url1'() => { $.get('/url2'() ...
- 异步编程之Generator(1)——领略魅力
异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...
- 异步编程之co——源码分析
异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...
- 异步编程之Generator(2)——剖析特性
异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...
- Javascript异步编程之setTimeout与setInterval详解分析(一)
Javascript异步编程之setTimeout与setInterval 在谈到异步编程时,本人最主要会从以下三个方面来总结异步编程(注意:特别解释:是总结,本人也是菜鸟,所以总结不好的,请各位大牛 ...
随机推荐
- 第二节:比较DateTime和DateTimeOffset两种时间类型并介绍Quartz.Net中用到的几类时间形式(定点、四舍五入、倍数、递增)
一. 时间的类型 1. 背景 这里为什么要介绍时间类型呢,明明是定时调度篇,原因是在定时任务中,任务什么时间开始执行,什么时间结束执行,要用到各种各样的时间模式,虽然这不能算是一个复杂的问题,但在正式 ...
- html - 表单form
一.表单 功能:表单用于向服务器传输数据,从而实现用户与Web服务器的交互 表单能够包含input系列标签,比如文本字段.复选框.单选框.提交按钮等等. 表单还可以包含textarea.select. ...
- 应用留数定理计算实积分 $\dps{I(x)=\int_{-1}^1\frac{\rd t}{\sqrt{1-t^2}(t-x)}\ (|x|>1,x\in\bbR)}$ [华中师范大学2010年复变函数复试试题]
应用留数定理计算实积分 $\dps{I(x)=\int_{-1}^1\frac{\rd t}{\sqrt{1-t^2}(t-x)}\ (|x|>1,x\in\bbR)}$ [华中师范大学2010 ...
- tomcat7的安装与maven安装
tomcat7的安装与配置: 下载tomcat7 :wget 地址 解压:tar -zxvf 文件名 编辑tomcat目录下的conf下的server.xml文件: <Connector por ...
- Java URLClassLoader 和 ClassLoader类加载器
开始:看名字都带有ClassLoader,叫做类加载器,事实上是可以理解为动态的加载类,不过,也不是只能加载类,也可以加载其他形式的文件,比如说.properties属性文件. 区别:其实在两个类加载 ...
- 可持久化 trie 的简单入门
可持久化 $trie$ ....又是一个表里不一的东西..... 可持久化 $trie$ 的介绍: 和主席树类似的,其实可持久化就是体现在前缀信息的维护上(搞不懂这怎么就叫做可持久化了...) $ ...
- TCP-IP详解笔记3
TCP-IP详解笔记3 地址解析协议 IP协议的设计目标是为跨越不同类型物理网络的分组交换提供互操作. 网络层软件使用的地址和底层网络硬件使用的地址之间进行转换. 对于TCP/IP网络,地址解析协议( ...
- 根据SQL_ID查询并杀会话
Oracle 根据SQL_ID查询并杀会话,清空执行计划缓冲池2018年09月06日 10:31:40 小学生汤米 阅读数:4731. 查询最近五分钟内最高频次SQL,查看event select t ...
- Mysql基本架构及查询流程
mysql体系结构简单概述: Connectors:接入方,支持协议很多 Management Serveices & Utilities:系统管理和控制工具例如:备份恢复,mysql复制集群 ...
- bzoj 3277
十分之恶心的后缀自动机 (其实是水题,但是我太弱了...) 首先,有一个预备知识:bzoj 2780https://blog.csdn.net/lleozhang/article/details/89 ...