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发送多次请求,而 ...
随机推荐
- Sitecore CMS中删除项目
如何删除项目以及如何在Sitecore CMS中恢复已删除的项目. 删除项目 有多种方便的方法可以删除Sitecore中的项目. 从功能区 在内容树中选择您要删除的项目. 单击功能区中“主页”选项卡的 ...
- ReactiveCocoa(I)
ReactiveCocoa常见类 1. RAC中最核心的类RACSiganl: RACSiganl:信号类,一般表示将来有数据传递,只要有数据改变,信号内部接收到数据,就会马上发出数据 解析: 信号类 ...
- python pandas 基础理解
其实每一篇博客我都要用很多琐碎的时间片段来学完写完,每次一点点,用到了就学一点,学一点就记录一点,要用上好几天甚至一两个礼拜才感觉某一小类的知识结构学的差不多了. Pandas 是基于 NumPy 的 ...
- MQ(转)
1. 到底什么时候该使用MQ? 1). 典型场景一:数据驱动的任务依赖 采用MQ的优点是: a. 不需要预留buffer,上游任务执行完,下游任务总会在第一时间被执行 b. 依赖多个任务,被多个任务依 ...
- 转:C# 对委托的BeginInvoke,EndInvoke 及Control 的BeginInvoke,EndInvoke 的理解
转载自:http://www.cnblogs.com/easyfrog/p/3141269.html using System; using System.Collections.Generic; u ...
- Linux下几种重启Nginx的方式,找出nginx配置文件路径和测试配置文件是否正确
Linux下几种重启Nginx的方式,找出nginx配置文件路径和测试配置文件是否正确 目录在/etc/ngnix/conf.d下找出nginx配置文件路径和测试配置文件是否正确# /usr/sbin ...
- system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
elasticsearch启动时遇到的错误 这个是elasticsearch配置文件的问题. 解决办法: 在elasticsearch.yml配置文件中 添加 bootstrap.system ...
- [转载]对称加密DES和TripleDES
一. 对称加密 对称加密,是一种比较传统的加密方式,其加密运算.解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码).因此,通信双方都必须 ...
- jetbrain_ia
在激活Jetbrains旗下任意产品的时候选择激活服务器填入以下地址便可成功激活 http://idea.liyang.io 最新方法(2018.3.4) http://blog.csdn.net/w ...
- 【题解】 Luogu P4312 / SP4155 [COCI 2009] OTOCI / 极地旅行社
原题地址:P4312 [COCI 2009] OTOCI / 极地旅行社/SP4155 OTOCI - OTOCI lct入门难度的题,十分弱智(小蒟蒻说lct是什么,能吃吗?) bridge操作判联 ...