ES6基础知识(Promise 对象)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Promise对象</title>
</head>
<body>
<script src="./jquery-3.2.1.min.js"></script>
<script>
/*基础结构*/
// const promise = new Promise(function(resolve, reject) {
// // ... some code // if (/* 异步操作成功 */){
// resolve(value);
// } else {
// reject(error);
// }
// }); // promise.then(function(value) {
// // success
// }).catch(function(error){
// // failure
// }); /*加载图片*/
// let url = `http://img.365jia.cn/uploads/news/folder_1230109/images/.662ba73c54c07708125743075da95466t2048l90.jpg`; // function loadImgUrl(url){
// return new Promise((resolve,reject) => {
// const imgUrl = new Image(); // imgUrl.onload = function(){
// return resolve(imgUrl);
// } // imgUrl.onerror = function(){
// return reject(new Error('不能加载该地址图片' + url));
// } // imgUrl.src = url; // });
// } // loadImgUrl(url).then((res) => {
// console.log(res);
// }).catch((error) => {
// console.log(error);
// }); /*ajax封装*/
// const getAjax = (option) => {
// return new Promise((resolve,reject) => {
// $.ajax({
// url:option.url,
// type:option.methods,
// success:(res) => {
// resolve(res)
// },
// fail:(error) => {
// reject(error)
// }
// });
// });
// } // let option = {
// url:`https://www.easy-mock.com/mock/5b62549fbf26d2748cff3cf4/dashuju/visualize`,
// methods:'GET'
// } // let g1 = getAjax(option).then((res) => {
// console.log(res);
// }).catch((error) => {
// console.log(error);
// }); /*一个异步操作的结果是返回另一个异步操作*/
// let g2 = new Promise((resolve,reject) => {
// resolve(g1);//这里把g1对象作为参数
// }); // g2.then(() => {//then要等g1执行完成之后才能执行
// console.log(111);
// }); /*finally方法用于指定不管 Promise 对象最后状态如何,都会执行的操作。该方法是 ES2018 引入标准的*/
// promise .then(result => {···}).catch(error => {···}).finally(() => {···}); /*Promise.all方法用于将多个 Promise 实例,包装成一个新的 Promise 实例*/
// const pResolve = Promise.all([p1, p2, p3]);//只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数
// const pReject = Promise.all([p1, p2, p3]);//只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数 // // 生成一个Promise对象的数组
// const promises = [2, 3, 5, 7, 11, 13].map(function (id) {
// return getJSON('/post/' + id + ".json");
// }); // Promise.all(promises).then(function (posts) {
// // ...
// }).catch(function(reason){
// // ...
// });//promises是包含 6 个 Promise 实例的数组,只有这 6 个实例的状态都变成fulfilled,或者其中有一个变为rejected,才会调用Promise.all方法后面的回调函数 /*Promise.race方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例*/
// const p = Promise.race([p1, p2, p3]);//只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给p的回调函数 /*对象转为 Promise 对象,Promise.resolve方法*/
// Promise.resolve('foo')
// // 等价于
// new Promise(resolve => resolve('foo')) /*
(1)参数是一个 Promise 实例,如果参数是 Promise 实例,那么Promise.resolve将不做任何修改、原封不动地返回这个实例。 (2)参数是一个thenable对象,thenable对象指的是具有then方法的对象 let thenable = {
then: function(resolve, reject) {
resolve(42);
}
}; let p1 = Promise.resolve(thenable);
p1.then(function(value) {
console.log(value); // 42
}); (3)参数不是具有then方法的对象,或根本就不是对象 const p = Promise.resolve('Hello'); p.then(function (s){
console.log(s)// Hello
}); (4)不带有任何参数 const p = Promise.resolve(); p.then(function () {
// ...
}); */ </script>
</body>
</html>
备注:文中多数内容摘自阮一峰老师文章,仅供自我学习查阅。
ES6基础知识(Promise 对象)的更多相关文章
- es6中的promise对象
Promise是异步里面的一种解决方案,解决了回调嵌套的问题,es6将其进行了语言标准,同意了用法,提供了`promise`对象, promise对象有三种状态:pending(进行中) .Resol ...
- es6学习笔记--promise对象
Promise对象是为了简化异步编程.解决回调地狱情况 Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可 ...
- es6基础知识
1.超引用:(...) 用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中 function fun(...args){ console.log(args); //[1,2,3,4,5,6] ar ...
- Nodejs与ES6系列2:Promise对象
2.promise对象 js单线程异步执行的特性,因此在代码中充斥着回调函数.随着回调函数的增加,代码的可读性会愈来愈差,因此引入promise对象是不错的一种选择,可以避免层层回调函数.在ECMA6 ...
- ES6入门之Promise对象
1. Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案--回调函数和事件更合理.更强大. 1.1 什么是Promise 简单来说就是一个容器,里面保存着某个未来才会结 ...
- ES6基础知识(async 函数)
1.async 函数是什么?一句话,它就是 Generator 函数的语法糖. const fs = require('fs'); const readFile = function (fileNam ...
- ES6基础知识(Reflect)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ES6 基础知识
let:用来定义变量特点:只能在代码块里面使用,let拥有块级作用域;并且let不允许重复声明; 比如: var a = 12; var a = 5; alert(a); //5; let a = 1 ...
- ES6基础三(对象)
对象赋值 在es6中,可以直接将声明的变量赋值给对象: Object.keys().Object.values()和Object.entries() 在ES6中,允许我们使用变量作为对象的ke ...
随机推荐
- SpringMVC的数据输出
使用 @Controller public class OutputController { @RequestMapping("/handle01") public String ...
- VUE自学日志01-MVC和MVVM
一.需要了解的基础概念 Model(M)是指数据模型,泛指后端进行的各种业务逻辑处理和数据操控,主要围绕数据库系统展开.这里的难点主要在于需要和前端约定统一的接口规则. View(V)是视图层,也就是 ...
- MySQL5.7主从复制-异步复制搭建
两台服务器,系统是Redhat6.5,MySQL版本是5.7.18.1.在主库上,创建复制使用的用户,并授予replication slave权限.这里创建用户repl,可以从IP为10.10.10 ...
- Jmeter使用问题记录
Jmeter下载安装,设置中文,返回值乱码处理,下载接口测试 下载地址 解压后,在Jmeter的bin文件夹下启动 修改默认启动为中文简体:打开bin目录下的jmeter.properties文件,在 ...
- 二进制对比工具HexCmp的使用
一.前提 遇到一个问题,文件通过后台上传成功后,客户端下载解压后,再次加载文件报错,报错信息该模块应包含一个程序集清单. (异常来自 HRESULT:0x80131018).但该错误文件与原文件大小一 ...
- Java初步学习——2021.10.12每日总结,第六周周二
(1)今天做了什么: (2)明天准备做什么? (3)遇到的问题,如何解决? 今天学习了菜鸟教程Java实例,数组 1.数组的排序和元素的查找--sort和binarySearch方法 import j ...
- 题解 GT考试
题目传送门 题目大意 给出\(n,m,k\),以及一个长度为\(m\)的数字串\(s_{1,2,...,m}\),求有多少个长度为\(n\)的数字串\(X\)满足\(s\)不出现在其中的个数模\(k\ ...
- SPOJ2939 QTREE5(LCT维护子树信息)
QWQ嘤嘤嘤 此题正规题解应该是边分治??或者是树剖(总之不是LCT) 但是我这里还是把它当成一个LCT题目来做 首先,这个题的重点还是在update上 因为有\(makeroot\)这个操作的存在, ...
- bzoj4094 && luogu3097 最优挤奶
题目大意: 给定n个点排成一排,每个点有一个点权,有m次修改,每次改变某个点的点权并将最大点独立集计入答案,输出最终的答案 其中\(n\le 40000\ , \ m\le 50000\) QWQ说实 ...
- 定制input元素
定制input元素 input元素可以用来生成一个供用户输入数据的简单文本框.其缺点在于用户在其中输入什么值都可以.有时这还不错,但是有时设计者可能希望让用户输入特定类型的数据.在后一种情况下,可以对 ...