promise、async和await
async:
async function 声明将定义一个返回 AsyncFunction 对象的异步函数。
当调用一个 async 函数时,会返回一个 Promise 对象。当这个 async 函数返回一个值时,Promise 的 resolve 方法会负责传递这个值;当 async 函数抛出异常时,Promise 的 reject 方法也会传递这个异常值。
(async函数返回一个 Promise 对象,当函数执行的时候,一旦遇到 await 就会先返回,等到触发的异步操作完成,再接着执行函数体内后面的语句。)
await:
语法:[return_value] = await expression;
表达式(express):一个 Promise 对象或者任何要等待的值。返回值(return_value):返回 Promise 对象的处理结果。如果等待的不是 Promise 对象,则返回该值本身。
(await必须和async一起使用)
// demo1的setTimeout完成后执行demo2
function demo1(){
return new Promise(function(resolve, reject){
//异步操作
setTimeout(function(){
resolve({
type:'success',
data:'demo1的async异步完成'
});
}, 1000);
});
} function demo2(){
console.log('我是demo2')
} async function getP(){
const p = await demo1(); // {type:'success',data:'demo1的async异步完成'}
return p;
} //getP()是一个Promise 对象
getP().then((res)=>{
console.log(res.data); // demo1的async异步完成
demo2();
}) // 运行的结果:
// demo1的async异步完成
// 我是demo2
Promise:
Promise是一个构造函数,身上有all、reject、resolve这几个方法,原型上有then、catch方法.
all:并行执行异步操作,并且在所有异步操作执行完后才执行回调;
resolve:异步操作执行成功后的回调函数
reject:异步操作执行失败后的回调函数,把Promise的状态置为rejected,我们在then中能捕捉到,然后执行“失败”情况的回调;
then:用于多层回调,(可传两个函数,第一个是成功的回调,第二个是失败的回调函数)
catch:在执行resolve的回调(也就是hen中的第一个参数)时,如果抛出异常了(代码出错了),那么并不会报错卡死js,而是会进到这个catch方法中
用法:
调用方式二:
resolveMethods1()
.then(function (data) {
console.log(data);
return resolveMethods1();
})
.catch(function (data) {
console.log(data);
return resolveMethods2();
})
.then(function (data) {
console.log(data);
})
.catch(function (data) {
console.log(data);
});
结果如下(方式一和方式二的结果是一样的):
promise、async和await之执行顺序可参考:https://lvdingjin.github.io/tech/2018/05/27/async-and-await.html
promise、async和await的更多相关文章
- ES系列之Promise async 和 await
概述 promise是异步编程的一种解决方案,比传统的解决方案—回调函数和事件—更合理更强大. 所谓的promise就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作的结果). Pro ...
- promise, async和await
最开始实现异步的方法:回调函数 method1(function(err, result) { if (err) { throw err; } method2(function(err, result ...
- promise以及async、await学习总结
Promise/async.await帮我们解决了什么 它给我们提供了一种新的异步编程解决方案,同时避免了困扰已久的回调地狱 // 异步的处理可能会产生这样的回调地狱(第二个异步操作和第一个异步的结果 ...
- Promise,Async,await简介
Promise 对象 转载:http://wiki.jikexueyuan.com/project/es6/promise.html 基本用法 ES6 原生提供了 Promise 对象.所谓 Prom ...
- promise async await使用
1.Promise (名字含义:promise为承诺,表示其他手段无法改变) Promise 对象代表一个异步操作,其不受外界影响,有三种状态: Pending(进行中.未完成的) Resolved( ...
- ES 7 async/await Promise
如何添加SSL证书实现https请求 https://blog.csdn.net/lupengfei1009/article/details/76828190/ ES 7 async/awai ...
- 详解promise、async和await的执行顺序
1.题目和答案 一道题题目:下面这段promise.async和await代码,请问控制台打印的顺序? async function async1(){ console.log('async1 sta ...
- Promise、async、await在Egret的简单应用
Egret Engnie 5.1.10 Egret Wing 4.1.5 一.Promise.async.await相关知识 Promise介绍 阮一峰 async函数 阮一峰 具体和详细的说明用法可 ...
- async和await对promise异步方案的改进,以及使用注意事项
async.await相比原生promise的有优势: 1.更加简洁,await一个promise即可,那么会自动返回这个promise的resolve值,无需在then函数的回调中手动取值,彻底解决 ...
随机推荐
- WPF MultiBinding,多值转化器IMultiValueConverter,自制调色板 palette
public class RGBConverter : IMultiValueConverter { //正向修改,整合颜色值 public object Convert(object[] value ...
- php配置出错,引发上传文件出错
今天在做文件上传的时候,按正常逻辑提交,可提交到服务器后,$_FILES['tmp_name']死活不对,表单的enctype="multipart/form-data" 这个也加 ...
- QQuickPaintedItem鼠标精准拾取(pick/select)研究
QT C++在2D图形方面已经做的很完善了,在PC端(Windows.Linux和MaC)上都有很好的表现. QT中的QML特别适合于移动端应用的开发,QML中的一些基本形状类型并不是一一地与Qt C ...
- VMware + CentOS 7搭建环境(二)
1.环境要求建议使用VMwareWorkstation虚拟机软件:可以使用快照功能,保存虚拟机状态:本文档示例版本10.0.1:1.2 CentOS系统的iso文件; 下载好的.iso的压缩文件格式, ...
- 个人项目-WC(Java实现)
一.Github项目地址: https://github.com/kestrelcjx/-WC-Java- 二.PSP表格 PSP2.1 Personal Software Process Stage ...
- MySQL Backup--使用mysqldump依次备份所有数据库
某些场景下需要将数据库分开备份,有些场景又需要将所有数据库合在一起备份,特此整理此备份脚本 #!/bin/bash ##======================================== ...
- JAVA concurrent包下Semaphore、CountDownLatch等用法
CountDownLatch 跟join的区别 CountDownLatch用处跟join很像,但是CountDownLatch更加灵活,如果子线程有多个阶段a.b.c; 那么我们可以实现在a阶段完成 ...
- org.json package
JSON is a light-weight,language independent,data interchange format. org.json package implement JSON ...
- 《linux就该这么学》课堂笔记17 分离解析、DHCP、电子邮件系统
1.动态主机配置协议(DHCP,Dynamic Host Configuration Protocol) 自动管理局域网内主机的IP地址.子网掩码.网关地址及DNS地址等参数,可以有效地提升IP地址的 ...
- 基于KVM的虚拟机创建
KVM基本介绍: KVM是Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中,KVM目前 ...