简介

promise是什么,它可以说是异步编程的一种解决方法,就拿传统的ajax发请求来说,单个还好,如果是一个请求回来的数据还要被其他请求调用,不断地嵌套,可想而知,代码看起来是很乱的,promise主要是为了解决这种情景而出现的。

使用

promise是一种异步解决方案。

  • 由于ajax异步方式请求数据时,我们不能知道数据具体回来的事件,所以过去只能将一个callback函数传递给ajax封装的方法,当ajax异步请求完成时,执行callback函数。
  • promise对象接受resolve和reject两个参数,当一个异步动作发生时,promise对象会通过resolve完成对动作成功进行解析,reject会捕获这个动作的异常。一个promise对象,通过new Promise().then()执行下一步骤操作。
  • axios is a promise based HTTP client for the browser and node.js。也就是说,使用axios发出请求,难免涉及promise。

Promise构造函数的参数是一个函数,函数里面的代码是异步的,即Promise里面的操作,和Promise()外面的操作时异步"同时"进行的。Promise中的函数的第一个参数是回调函数,resolve用来触发then里面的代码,第二个参数是回调函数,reject用来触发catch中的代码,throw new Error();也可以触发catch,

  • resolve和reject是两个回调函数,调用resolve会触发then,reject会触发catch
<script>
new Promise((resolve, reject) =>{setTimeout(() =>{//成功的时候调用resolveresolve('成功data')//失败的时候调用rejectreject('error message')}, 1000)
}).then((data) =>{//处理成功后的逻辑console.log(data);//这个data 是接收的resolve参数--
}).catch((err) =>{console.log(err);
})
</script>  
  • 在一个promise链中,只要任何一个promise被reject,promise链就被破坏了,reject之后的promise都不会再执行,而是直接调用.catch方法。
p1().then(p2).then(p3).then(function(data) {console.log('data: ' + data);}).catch(function(error) {console.log('error: ' + error);});function p1() {return new Promise(function(resolve, reject) {console.log('p1 resolved');resolve(123);});
}function p2() {return new Promise(function(resolve, reject) {console.log('p2 rejected');reject(456);});
}function p3() {return new Promise(function(resolve, reject) {console.log('p3 resolved');resolve(789);});
}// 执行结果p1 resolvedp2 rejectederror: 456

async await

Promise构造函数的参数是一个函数,函数里面的代码是异步的,即Promise里面的操作,和Promise()外面的操作时异步"同时"进行的。此外,只要在函数前面加上async 关键字,也可以指明函数是异步的。

async关键字实际是通过Promise实现,如果async 函数中有返回一个值 ,当调用该函数时,内部会调用Promise.solve() 方法把它转化成一个promise 对象作为返回,但如果timeout 函数内部抛出错误,那么就会调用Promise.reject() 返回一个promise 对象。若某函数调用一个异步函数(比如内部含有primise),该函数应用async修饰。

await表示“等待”,修饰返回promise 对象的表达式。注意await 关键字只能放到async 函数里面。

function doubleAfter2seconds(num) {return new Promise((resolve, reject) => {setTimeout(() => {resolve(2 * num)}, 2000);} )
}//写一个async 函数,从而可以使用await 关键字, await 后面放置的就是返回promise对象的一个表达式,所以它后面可以写上 doubleAfter2seconds 函数的调用
async function testResult() {let result = await doubleAfter2seconds(30);console.log(result);
}

await 等待后面的promise对象执行完毕,然后拿到promise resolve 的值并进行返回。显然await可以修饰axios请求,等待得到结果再往下进行,如:

async getUserList(){const {data: res} = await this.$http.get('users', {params: this.queryInfo})//console.log(res)if (res.meta.status !== 200) return this.$message.error('获取用户列表失败! ')this.userlist = res.data.usersthis.total = res.data.total}

vue中Promise的用法相关推荐

  1. vue中directives的用法

    Vue中directives的用法 关于 vue 中 directives 的用法问题,详细可以参考vue官方对directives的解释 当前文章主要讲述directives怎么用,directiv ...

  2. vue中定时器一般用法,定时器函数传参以及清除定时器

    一.vue中定时器一般用法(举个例子) 显示当前时间, setInterval()方法会每秒执行一次函数,类似手表功能: <template><div class="use ...

  3. vue中watch的用法

    在vue中,使用watch来响应数据的变化.watch的用法大致有三种.下面代码是watch的一种简单的用法: <input type="text" v-model=&quo ...

  4. vue中this.init用法_Vue中的this.$options.data()和this.$data用法说明

    问题 项目里遇到一个问题,用this.$options.data()重置组件data时,data()里用this获取的props或method都为undefined,代码简化如下: export de ...

  5. vue中props的用法

    vue使用props的用法 日常编程中都会用到父组件用子组件.子用父的情况,下面先介绍一种子传父的情况 1.在父组件中 (1).首先是在其定义一个list属性以存储其数据值 (2).定义一个绑定属性& ...

  6. vue中@oninput的用法

    .vue文件其实是一个组件,今天这篇文章要讲的是.vue文件中监听input的输入值变化事件.需求是这页面中,改变input的值,就调用一个事件,第一想到的是oninput. oninput 事件在用 ...

  7. vue中$root的用法

    vue中$root是用来访问根组件的,用法: this.$root.根组件属性 代码: main.js: new Vue({data(){return{isUpdate:true //根组件属性}}, ...

  8. vue 中provide的用法_聊聊Vue中provide/inject的应用详解

    众所周知,在组件式开发中,最大的痛点就在于组件之间的通信.在 Vue 中,Vue 提供了各种各样的组件通信方式,从基础的 props/$emit 到用于兄弟组件通信的 EventBus,再到用于全局数 ...

  9. Vue中 $ref 的用法

    ref 被用来给DOM元素或子组件注册引用信息.引用信息会根据父组件的 $refs 对象进行注册.如果在普通的DOM元素上使用,引用信息就是元素; 如果用在子组件上,引用信息就是组件实例 注意:只要想 ...

最新文章

  1. 为AI从业者/研究生/研究员专门定制的全网唯一高端AI训练营
  2. linux type命令(用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令,如果给出的指令为外部指令,则显示其绝对路径)
  3. lc滤波电路电感电容值选择_这几种常见的无源滤波电路,你都了解吗 ?
  4. 配置MYSQL远程连接
  5. javaweb---简易邮件发送
  6. android activity 显示无焦点_Android面试题集锦之fragemnt
  7. mysql8 修改密码_Mysql 8新特性之(1):账户与安全更人性化
  8. 将JSON对象中的某个字段进行分组和排序(java实现)
  9. 一个类似权限挂载的设计
  10. 老电脑 升级 cpu性能排行 高性价比的cpu主板选择
  11. 2021-06-02使用Digispark(ATTINY85)制作一个Badusb
  12. R TALK | 旷视研究院范浩强周舒畅: AI计算机摄影的原理、应用与硬件设计
  13. C++中的push_back函数
  14. 电线电缆很烫,都有哪些原因
  15. 【新知实验室 陈林】
  16. VB/VBA的变量,竟还有这些秘密
  17. 单小说下载php,PHP 单TXT下载和多个TXT文件打包下载 同时
  18. scala case语句中的中置表示法
  19. AI: 企业数字化转型的简介、发展以及未来趋势
  20. 树莓派4B arm平台aarch64 pip安装pytorch

热门文章

  1. Python自定义一个异常类【注释详细】
  2. CVE-2018-4878 flash漏洞复现
  3. 20天完成智能推送系统。
  4. Java--反编译软件
  5. 嵌入式之uboot源码分析-启动第二阶段学习笔记(下篇)
  6. Linux添加系统用户
  7. 微信小程序实现轮播图(超简单)
  8. 国内外主要的PHP开源CMS系统分析
  9. 教你 IntelliJ IDEA 永久激活,建议收藏!(转)
  10. JAVA小项目(四)—— 贪吃蛇【轻松入门,附源码】