promise

// 先构造一个 promise 函数
// resolve 和 reject 都是一个函数
// resolve 在成功时调用
// reject 在失败时调用
function promise() {
return new Promise((resolve, reject) => {
let tar = Math.random(0, 1)
if (tar > 0.5) {
console.log('suceess')
setTimeout(function() {
resolve('resolve')
}, 1000)
} else {
console.log('fail')
setTimeout(function() {
reject('reject')
}, 1000)
}
})
} // then 和 catch 第一个参数为resolve状态时的回调,第二个参数为reject状态时的回调
// catch 相当于 then(null, reject)
promise().then(
(resolve) => console.log('then', resolve)
).catch(
(reject) => console.log('catch', reject)
) // then 后面还可以接 then 一直链式调用
// 第一个 then 接受的参数是 resolve 函数传过来的参数
// 第二个 then 接受一个参数是第一个 then 返回的值
promise().then(
(resolve) => (resolve + 1) // 接受 resolve 返回 resolve + 1
).then(
(plusOne) => console.log(plusOne) // 接受 resolve +1 并打印
).catch(
(reject) => console.log('catch', reject)
)

async

// 同样需要一个 promise 对象
function promise() {
return new Promise((resolve, reject) => {
let tar = Math.random(0, 1)
if (tar > 0.5) {
console.log('success')
setTimeout(function() {
resolve('resolve')
}, 1000)
} else {
console.log('fail')
setTimeout(function() {
reject('reject')
}, 1000)
}
})
} // 只是调用的方法跟 then/catch 不一样
// async 函数执行时,一旦遇到 await 就会先返回,等异步操作完成,再接着执行后面的操作
async function async() {
const res = await promise()
console.log(res)
console.log('wait')
return res
} // async 函数返回 promise 对象
// 只有函数内的 await 语句全部执行完,或者遇到 return 或 抛出错误,才会发生状态改变
// 如果发生错误或状态为 reject 则执行 catch
async().then(
(res) => console.log(res)
).catch(
(e) => console.log(e)
)

promise 和 async 的用法的更多相关文章

  1. 异步操作之 Promise 和 Async await 用法进阶

    ES6 提供的 Promise 方法和 ES7 提供的 Async/Await 语法糖都可以更好解决多层回调问题, 详细用法可参考:https://www.cnblogs.com/cckui/p/99 ...

  2. 前端异步编程之Promise和async的用法

    传统的异步解决方案采用回调函数和事件监听的方式,而这里主要记录两种异步编程的新方案: ES6的新语法Promise ES2017引入的async函数 Generator函数(略) Promise的含义 ...

  3. promise和async/await的用法

    promise和async都是做异步处理的, 使异步转为同步 1.promise 它和Promise诞生的目的都是为了解决“回调地狱”, promise使用方法: <button @click= ...

  4. Promise、async、await在Egret的简单应用

    Egret Engnie 5.1.10 Egret Wing 4.1.5 一.Promise.async.await相关知识 Promise介绍 阮一峰 async函数 阮一峰 具体和详细的说明用法可 ...

  5. promise 进阶 —— async / await 结合 bluebird

    一.背景 1.Node.js 异步控制 在之前写的 callback vs async.js vs promise vs async / await 里,我介绍了 ES6 的 promise 和 ES ...

  6. promise、async和await

    async:async function 声明将定义一个返回 AsyncFunction 对象的异步函数.当调用一个 async 函数时,会返回一个 Promise 对象.当这个 async 函数返回 ...

  7. Promise和async/await

    1.promise对象 promise 对象有三种状态:pending(进行中).fulfilled(已成功)和 rejected(已失败).promise 对象的状态改变,只有两种可能:从 pend ...

  8. Promise 和async/await 的使用理解

    Promise 和async/await 的使用理解 1. new Promise时就会开始执行语句. new Promise(resolve => resolove('成功信息') )     ...

  9. 20分钟带你掌握JavaScript Promise和 Async/Await

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://www.freecodecamp.org/news/learn-promise-a ...

随机推荐

  1. CentOS6.9-zabbix3.2启动失败原因及页面没有mysql选择项

     环境内核信息: [root@zabbix- ~]# uname -a Linux lodboyedu- -.el6.x86_64 # SMP Tue Mar :: UTC x86_64 x86_64 ...

  2. hdu 5225 Tom and permutation(回溯)

    题目链接:hdu 5225 Tom and permutation #include <cstdio> #include <cstring> #include <algo ...

  3. 页面的新开页,window.open的hacker

    一.window.open如何进行hack 网上看的办法很多,归根接地还是不能解决掉,只有通过a标签的target属性 $obj.click(function(){  var newTab=windo ...

  4. Django的Models

    Django的数据库配置: 1    django默认支持sqlite,mysql, oracle,postgresql数据库 2.   在django的项目中会默认使用sqlite数据库,如果要使用 ...

  5. dubbo2.5.6从下载到编译成功并且部署成功过程

    本文基于dubbo2.5.6版本 原文链接:http://www.cnblogs.com/zhuwenjoyce/       1,下载dubbo 首先从 github 下载源代码并阅读 readme ...

  6. iOS设计模式之懒加载

    一.为什么要懒加载? 答: iPhone设备内存有限,如果在程序在启动后就一次性加载将来会用到的所有资源,那么久可能会耗尽iOS设备的内存.这些资源例如大量的数据,图片,音频,过多的控件等. 二.懒加 ...

  7. 《程序员面试金典(第5版)》【PDF】下载

    <程序员面试金典(第5版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382252 内容简介 本书作者Gayle Laakma ...

  8. docker commit使用

    我们运行的容器可能在镜像的基础上做了一些修改,有时候我们希望保存起来,封装成一个更新的镜像 docker自己提供的有commit功能 我们以centos为例,现在我们要在一个裸的centos上面安装v ...

  9. while,until

    while ] 注释:中括号写的条件判断式中不能用<.=.>这类符号,要用-lt.-eq.-gt这类符号,且变量前要用$来取值 do sum=$(($sum+$i)) i=$(($i+)) ...

  10. sqlserver 存储过程 分页搜索查询

    具体调用实例见代码最后一行注释区域 --if exists(select * from sysobjects where id = object_id(N'page_search') and type ...