promise对象的使用
ES6中的promise的出现给我们很好的解决了回调地狱的问题,在使用ES5的时候,在多层嵌套回调时,写完的代码层次过多,很难进行维护和二次开发,ES6认识到了这点问题, 现在promise的使用,完美解决了这个问题。那我们如何理解promise这个单词在ES5中的作用那,你可以想象他是一种承诺,当它成功时执行一些代码,当它失败时执行一些代码。 它更符合人类的行为思考习惯,而不在是晦涩难懂的冰冷语言。
多段功能函数
let state=; function step1(resolve,reject){ console.log('1.开始-洗菜做饭'); ){ resolve('洗菜做饭--完成'); }else{ reject('洗菜做饭--出错'); } } function step2(resolve,reject){ console.log('2.开始-坐下来吃饭'); ){ resolve('坐下来吃饭--完成'); }else{ reject('坐下来吃饭--出错'); } } function step3(resolve,reject){ console.log('3.开始-收拾桌子洗完'); ){ resolve('收拾桌子洗完--完成'); }else{ reject('收拾桌子洗完--出错'); } }
执行上面多算功能函数 这样 优雅的写法 成功避免了 回调地狱
new Promise(step1).then(function(val){ console.log(val); return new Promise(step2); }).then(function(val){ console.log(val); return new Promise(step3); }).then(function(val){ console.log(val); return val; });
再优雅的理解上面的多段功能函数
未用前
setTimeout(function() { console.log('Hello'); // 1秒后输出"Hello" setTimeout(function() { console.log('Hi'); // 2秒后输出"Hi" }, ); }, );
使用后
var waitSecond = new Promise(function(resolve, reject) { setTimeout(resolve, ); }); waitSecond .then(function() { console.log("Hello"); // 1秒后输出"Hello" return waitSecond; }) .then(function() { console.log("Hi"); // 2秒后输出"Hi" });
在vue中用上拉加载下拉刷新方式请求数据
methods: { // 模拟数据请求 getData () { return new Promise(resolve => { setTimeout(() => { const arr = [] ; i < ; i++) { arr.push(count++) } resolve(arr) }, ) }) }, onPullingDown () { // 模拟下拉刷新 console.log('下拉刷新') count = this.getData().then(res => { this.items = res }) }, onPullingUp () { // 模拟上拉 加载更多数据 console.log('上拉加载') this.getData().then(res => { this.items = this.items.concat(res) ){ //加载代码 }else{ //取消加载 } }) } }
借助axios封装post、get请求
//封装统一get请求 export function get(url, param = {}) { return new Promise((resolve,reject) => { axios.get(url,{ params:param }).then(response => { resolve(response.data); }).catch(err => { reject(err) }) }) }; //封装统一post请求 export function post(url,params = {}){ return new Promise((resolve,reject) => { axios.post(url,params).then(response => { resolve(response.data); }).catch( err =>{ reject(err) }) }) };
调用方式
import {get, post} from '路径';
this.get().then( (response) =>{
}).catch( (err) =>{
})
Promise.all 多条异步当作同步一起处理
async getMarketing(categoryId) { } async getGoodsList(category_id) { } const marketingPromise = self.getMarketing(tabValue) const goodsListPromise = self.getGoodsList(tabValue) Promise.all([marketingPromise, goodsListPromise]).finally(_ => { self.wxApi.hideLoading() self.dataLoading = false })
promise对象的使用的更多相关文章
- angular学习笔记(二十八-附2)-$http,$resource中的promise对象
下面这种promise的用法,我从第一篇$http笔记到$resource笔记中,一直都有用到: HttpREST.factory('cardResource',function($resource) ...
- ES6深入学习记录(二)promise对象相关
1.Promise的含义 Promise是异步编程的一种解决方案,比传统的解决方案--回调函数和事件更合理和强大.ES6将其写进了语言标准,统一了用法,原生提供了promise对象. 所谓Promis ...
- es6中的promise对象
Promise是异步里面的一种解决方案,解决了回调嵌套的问题,es6将其进行了语言标准,同意了用法,提供了`promise`对象, promise对象有三种状态:pending(进行中) .Resol ...
- ES6的promise对象应该这样用
ES6修补了一位Js修真者诸多的遗憾. 曾几何时,我这个小白从js非阻塞特性的坑中爬出来,当我经历了一些回调丑陋的写法和优化的尝试之后,我深深觉得js对于多线程阻塞式的开发语言而言,可能有着其太明显的 ...
- Angularjs promise对象解析
1.先来看一段Demo,看完这个demo你可以思考下如果使用$.ajax如何处理同样的逻辑,使用ng的promise有何优势? var ngApp=angular.module('ngApp',[]) ...
- JavaScript异步编程(1)- ECMAScript 6的Promise对象
JavaScript的Callback机制深入人心.而ECMAScript的世界同样充斥的各种异步操作(异步IO.setTimeout等).异步和Callback的搭载很容易就衍生"回调金字 ...
- Promise对象
1.Promise思想:每一个异步任务立刻返回一个Promise对象,由于是立刻返回,所以可以采用同步操作的流程.这个Promises对象有一个then方法,允许指定回调函数,在异步任务完成后调用. ...
- angularJS中的Promise对象($q)的深入理解
原文链接:a better way to learn AngularJS - promises AngularJS通过内置的$q服务提供Promise编程模式.通过将异步函数注册到promise对象, ...
- 通过一道笔试题浅谈javascript中的promise对象
因为前几天做了一个promise对象捕获错误的面试题目,所以这几天又重温了一下promise对象.现在借这道题来分享下一些很基础的知识点. 下面是一个面试题目,三个promise对象捕获错误的例子,返 ...
- ECMAScript6的Promise对象
1. 概念 Promise对象用于异步(asynchronouss)计算,一个Promise对象代表着一个还未完成,但预期完成的操作. 2. 出现原因: 1) 如果你需要通过ajax发送多次请求,而 ...
随机推荐
- Math对象属性
2018-11-28 11:18:46
- 【转】Spotlight实时监控Windows Server 2008
Windows Server 2008作为服务器平台已逐渐被推广和应用,丰富的功能和良好的稳定性为其赢得了不错的口碑.但是和Windows Server 2003相比,其系统的自我监控功能并没有多大的 ...
- Runtime(IV) - 序列化与反序列化
准备条件 父类 Biology Biology.h #import <Foundation/Foundation.h> @interface Biology : NSObject { NS ...
- Spark学习之路 (五)Spark伪分布式安装
一.JDK的安装 JDK使用root用户安装 1.1 上传安装包并解压 [root@hadoop1 soft]# tar -zxvf jdk-8u73-linux-x64.tar.gz -C /usr ...
- 【Hive学习之六】Hive Lateral View &视图&索引
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 apache-hive-3.1.1 ...
- 转:【专题十二】实现一个简单的FTP服务器
引言: 休息一个国庆节后好久没有更新文章了,主要是刚开始休息完心态还没有调整过来的, 现在差不多进入状态了, 所以继续和大家分享下网络编程的知识,在本专题中将和大家分享如何自己实现一个简单的FTP服务 ...
- 13年总结js,css,java xml
--------------------------------------javaScript知识点----------------------------- jQuery对象[Object obj ...
- linux 开始
3306 -- mysql 8000--django默认 服务由端口控制 https -- 443 http -- 80 linux发行版:1.centos 免费版的redhat2.ubuntu 乌版 ...
- [转载]localStorage使用总结
一.什么是localStorage.sessionStorage 在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题 ...
- linux centos6.5 php5.6 安装PHPUnit 5.2.9 (转)
转自:http://blog.csdn.net/shancunxiaoyazhi/article/details/50765293 操作系统版本:CentOS6.5 PHP版本:5.6 下载phpun ...