ES6——Promise
异步和同步
异步,操作之间没有关系,同时执行多个操作, 代码复杂
同步,同时只能做一件事,代码简单
Promise 对象
用同步的方式来书写异步代码
Promise 让异步操作写起来,像在写同步操作的流程,不必一层层地嵌套回调函数
改善了可读性,对于多层嵌套的回调函数很方便
充当异步操作与回调函数之间的中介,使得异步操作具备同步操作的接口
Promise 也是一个构造函数
接受一个回调函数f1作为参数,f1里面是异步操作的代码
返回的p1就是一个 Promise 实例
所有异步任务都返回一个 Promise 实例
Promise 实例有一个then方法,用来指定下一步的回调函数
let p1 = new Promise(function(resolve, reject){
// 异步代码 resolve 成功了 reject 失败了
// $.ajax() 执行异步 AJAX 请求
$.ajax({
url: '10-arr.txt', //规定发送请求的 URL。默认是当前页面。
dataType:'json',//预期的服务器响应的数据类型。
success(arr){
resolve(arr);
},
error(err){
reject(err);
}
})
}); p1.then(function(arr){
console.log('成功了'+arr);
},function(err){
console.log('失败了'+err);
});let p1 = new Promise(function(resolve, reject){
$.ajax({
url: '10-arr.txt',
dataType:'json',
success(arr){
resolve(arr);
},
error(err){
reject(err);
}
})
});
let p2 = new Promise(function(resolve, reject){
$.ajax({
url: '10-arr1.txt',
dataType:'json',
success(arr){
resolve(arr);
},
error(err){
reject(err);
}
})
});
Promise.all([
p1,p2
]).then(function(arr){
let [res1, res2] = arr;
alert('全成功了');
alert(res1);
alert(res2);
},function(){
alert('至少有一个失败了');
});
// 失败!!!!!!!!!!!!!function createPromise(url){
return new Promise(function(resolve, reject){
$.ajax({
url,
dataType:'json',
success(arr){
resolve(arr);
},
error(err){
reject(err);
}
})
});
}
Promise.all([
createPromise('10-arr.txt'),
createPromise('10-arr1.txt')
]).then(function(arr){
let [res1, res2] = arr;
alert('全成功了');
alert(res1);
alert(res2);
},function(){
alert('至少有一个失败了');
});
// 失败!!!!!!!!!!!!!Promise.all([
$.ajax({url:'10-arr.txt',dataType:'json'}),
$.ajax({url:'10-arr1.txt',dataType:'json'})
]).then(function(results){
let [arr,json] = results;
alert('成功了');
console.log(arr.json);
},function(){
alert('失败了');
});
ES6——Promise的更多相关文章
- 通过 ES6 Promise 和 jQuery Deferred 的异同学习 Promise
Deferred 和 Promise ES6 和 jQuery 都有 Deffered 和 Promise,但是略有不同.不过它们的作用可以简单的用两句话来描述 Deffered 触发 resolve ...
- ES6 Promise 接口
构造函数 new Promise(function(resolve, reject){}); 构造函数接受一个函数(executor)作为参数,该函数在返回 Promise 实例之前被调用.函数的两个 ...
- Es6 Promise 用法详解
Promise是什么?? 打印出来看看 console.dir(Promise) 这么一看就明白了,Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方 ...
- ES6 Promise 全面总结
转载:点击查看原文 ES6 Promise对象 ES6中,新增了Promise对象,它主要用于处理异步回调代码,让代码不至于陷入回调嵌套的死路中. @-v-@ 1. Promise本质 Promise ...
- ES6 Promise 异步操作
最近越来越喜欢与大家进行资源分享了,并且及时的同步到自己的园子内,为什么呢? 一.小插曲(气氛搞起) 在上个月末,由于领导的高度重视(haha,这个高度是有多高呢,185就好了),走进了公司骨干员工的 ...
- 微信小程序Http高级封装 es6 promise
公司突然要开放微信小程序,持续蒙蔽的我还不知道小程序是个什么玩意. 于是上网查了一下,就开始着手开发..... 首先开发客户端的东西,都有个共同点,那就是 数据请求! 看了下小程序的请求方式大概和a ...
- 解析ES6 Promise
ES6 Promise 概念之类的,大概读者都应该有所知道,接下来我们直入终点. 先让我们来看看什么是Promise吧,他是一个object,类,arry,function? 首先,学习它的时候应该讲 ...
- jquery Promise和ES6 Promise的区别
1. Deferred对象有resolve和reject方法,可以直接修改状态 jquery用Deferred实现了Promise规范,Deferred与ES6 Promise的最大区别是: Defe ...
- ES6 Promise对象then方法链式调用
then()方法的作用是Promise实例添加解决(fulfillment)和拒绝(rejection)状态的回调函数.then()方法会返回一个新的Promise实例,所以then()方法后面可以继 ...
- ES6 Promise(2)
Promise的兴起,是因为异步方法调用中,往往会出现回调函数一环扣一环的情况.这种情况导致了回调金字塔的出现.不仅代码写起来费劲不美观,而且问题复杂的时候,阅读代码的人也难以理解. db.save( ...
随机推荐
- linux运维、架构之路-python2.6升级3.6
一.环境 1.系统 [root@m01 ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@m01 ~]# uname -r -. ...
- 认识.net Framework
- mysql配置参数设置和进程管理
# For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.7/en/server-co ...
- Linux基础命令及使用帮助
一.内部命令 内置命令(builtin):由shell程序自带的命令 help:查看内部命令 enable -n command 禁用某内部命令 enable -n 查看全部被禁用的命令 enable ...
- RedisTemplate访问Redis数据结构(前言)
Redis五种基本数据结构 redis提供键值对的形式对数据进行存储.支持五种数据类型:String(字符串),List(链表),Hash(散列),Set(无序集合),ZSet(有序集合).下面是网上 ...
- [CSP-S模拟测试]:玩具(概率DP)
题目描述 这个故事发生在很久以前,在$IcePrincess\text{_}1968$和$IcePrince\text{_}1968$都还在上幼儿园的时候. $IcePrince\text{_}196 ...
- [CSP-S模拟测试]:打扫卫生(暴力)
题目描述 有$N$头奶牛,每头那牛都有一个标号$P_i1\leqslant Pi\leqslant M\leqslant N\leqslant 40,000$.现在$Farmer\ John$要把这 ...
- 【转】i18n实现前端国际化(实例)
源地址:https://www.jianshu.com/p/ea93efef5155 i18n实现前端国际化(实例) 0.1442018.08.27 16:25:10字数 246阅读 10563 在今 ...
- yum命令查询详解
一.列举包文件列出资源库中所有可以安装或更新的rpm包# yum list列出资源库中特定的可以安装或更新以及已经安装的rpm包# yum list perl //列出名为perl ...
- Linux下修改mysql root密码
1.修改MySQL的配置文件(默认为/etc/my.cnf),在[mysqld]下添加一行skip-grant-tables 2.保存配置文件后,重启MySQL服务 service mysqld re ...