Promise

Promise 对象用于表示一个异步操作的最终状态(完成或失败),以及该异步操作的结果值。

摇色子游戏,随机1-6的一个整数,并且将其返回。

function fn() {    return new Promise((resolve, seject) => {  setTimeout(() => {   let n = parseInt(Math.random) * 6 + 1,10)// 1-6   resolve(n)  }, 3000) })}​fn().then(   (x) => { console.log('色子的点数是' + x) },   () => { console.log('色子坏了')})

async和await

**async function** 声明用于定义一个返回 AsyncFunction 对象的异步函数。异步函数是指通过事件循环异步执行的函数,它会通过一个隐式的 Promise 返回其结果。但是如果你的代码使用了异步函数,它的语法和结构会更像是标准的同步函数。

async function 声明异步函数

function 声明同步函数

function fn() {    return new Promise((resolve, seject) => {  setTimeout(() => {   let n = parseInt(Math.random) * 6 + 1,10)// 1-6   resolve(n)  }, 3000) })}​async function test() {    let n = await fn();    console.log(n)}​test()

再增加try...catch语句来捕获异常

function fn() {    return new Promise((resolve, seject) => {  setTimeout(() => {   let n = parseInt(Math.random) * 6 + 1,10)// 1-6            if (n>3){                if (猜测 === '大') {                resolve(n);               } else {                    reject(n);               }           } else {                if (猜测 === '小') {                resolve(n);               } else {                    reject(n);               }           }     }, 3000) })}​async function test() {    try {  let n = await fn("大");    console.log("好嗨哟" + n)   }catch (error) {  console.log("输光了" + n)   }   }​fn("大").then(f1, f2).then(f3, f4)test()

为什么不使用promise.then,而使用async await?

使异步代码看起来更像是同步代码,async await看起来更清晰简单

如果有两个色子,并且猜大小都猜对了才算成功,该怎么做呢?

Promise.all() 这个方法返回一个新的promise对象,该promise对象在iterable参数对象里所有promise 对象都成功的时候才会触发成功,一旦有任何一个iterable里面的promise对象失败则立 即触发该promise对象的失败。

Promise.race() 当iterable参数里的任意一个子promise被成功或失败后,父promise马上也会用子 promise的成功返回值或失败详情作为参数调用父promise绑定的相应句柄,并返回该 promise对象。

function 猜大小() {    return new Promise((resolve, seject) => {  setTimeout(() => {   let n = parseInt(Math.random) * 6 + 1,10)// 1-6            if (n>3){                if (猜测 === '大') {                resolve(n);               } else {                    reject(n);               }           } else {                if (猜测 === '小') {                resolve(n);               } else {                    reject(n);               }           }     }, 3000) })}​Promise.all([猜大小('大'), 猜大小('小')]) .then(() => {}, () => {})​async function test() {    try {  let n = await Promise.all([猜大小('大'), 猜大小('小')]);    console.log("好嗨哟" + n)   }catch (error) {  console.log("输光了" + n)   }   }​

转载于:https://www.cnblogs.com/yaokai729/p/11261264.html

promise ,async 小记相关推荐

  1. Promise async/await的理解和用法

    Promise && async/await的理解和用法 为什么需要promise(承诺)这个东西 在之前我们处理异步函数都是用回调这个方法,回调嵌套的时候会发现 阅读性 和 调试 的 ...

  2. ES6箭头函数以及promise/async/await测试案例

    ES6箭头函数的运用 下面以一段代码解释 function one(){return 1 以上函数用箭头函数写步骤,参考下面代码 {}和里面的东西先删去 one = (里面写参数/无参数的里面为空)= ...

  3. vue错误提示:Error in v-on handler (Promise/async): “Error: Error“

    报错信息如下 [Vue warn]: Error in v-on handler (Promise/async): "Error: Error"found in---> &l ...

  4. Error in created hook (Promise/async): “TypeError: Cannot read property ‘protocol‘ of undefined“ 的解决

    Error in created hook (Promise/async): "TypeError: Cannot read property 'protocol' of undefined ...

  5. 【echarts报错】[Vue warn]: Error in mounted hook (Promise/async): “TypeError: Cannot read properties of

    echarts安装创建图表时报这种错误:[Vue warn]: Error in mounted hook (Promise/async): "TypeError: Cannot read ...

  6. [Vue warn]: Error in v-on handler (Promise/async): “TypeError: Cannot read property ‘status‘ of 问题详解

    错误样式: [Vue warn]: Error in v-on handler (Promise/async): "TypeError: Cannot read property 'stat ...

  7. vue报错解决:Error in v-on handler (Promise/async): “TypeError: Cannot read properties ofundefined

    报错信息:[Vue warn]: Error in v-on handler (Promise/async): "TypeError: Cannot read properties of u ...

  8. angular2 学习笔记 ( Rxjs, Promise, Async/Await 的区别 )

    Promise 是 ES 6 Async/Await 是 ES 7 Rxjs 是一个 js 库 在使用 angular 时,你会经常看见这 3 个东西. 它们都和异步编程有关,有些情况下你会觉得用它们 ...

  9. mysql回调地狱_5、Express异步读取Mysql数据库 callback/promise/async

    一.Node异步 Node.js 异步编程的直接体现就是回调. 有了异步方法,我们可以一边操作数据库,一边执行其他命令,在数据库操作完成后,我们将查询数据作为回调函数的参数返回.这样在执行代码时就没有 ...

最新文章

  1. ajax提交Form
  2. 苹果系统的优点和缺点
  3. !-- --注释和%-- --%注释的区别
  4. (二分搜索法尺取法)subsequence
  5. 【例题+习题】【数值计算方法复习】【湘潭大学】(三)
  6. android 录音命令,音频延迟  |  Android NDK  |  Android Developers
  7. redis set不可重复_Redis的使用
  8. python面向过程实践汉诺塔_递归汉诺塔-和递归汉诺塔相关的内容-阿里云开发者社区...
  9. JavaWeb初级篇-HttpPost使用教程
  10. 玩转云服务器,怎样用云服务器架设搭建游戏:浪剑天下架设教程,手把手教你架设游戏服务器,小白一看就会
  11. 生日在java中怎么写_怎样用java做个生日提醒?如果同一天有多个人过生日怎么做?...
  12. Solr与MongoDB集成,实时增量索引[转]
  13. mysql有numeric类型吗_mysql数值类型 - numeric
  14. 我所了解的一些路由器对比
  15. 关于字符串旋转问题的一些心得
  16. python 函数的使用方法
  17. 《互联网+流通——F2R助力传统产业创新与转型》一一1.1 “互联网+”的本质、演进与发展趋势...
  18. Linux内核中断处理“下半部”机制(超详细~)
  19. 链克袋鼠Linker创建链克账户教程
  20. (转)PMBOK/CMM/CMMI/OPM3

热门文章

  1. 你知道char *s和char s[]的区别吗?
  2. wat java_并发工具优于wati、notify(69)
  3. Datawhale组队-Pandas(下)时序数据(打卡)
  4. python部落稿酬_Python之父考虑重构Python解释器
  5. 图像目标分割_2 FCN(Fully Convolutional Networks for Semantic Segmentation)
  6. 数据结构之图:加权无向图与寻找最小生成树,Python——27
  7. php开发环境 ubuntu,Ubuntu配置PHP开发环境
  8. ACwing 4. 多重背包问题 I(DP)
  9. LeetCode 755. 倒水(模拟)
  10. 程序员面试金典 - 面试题 08.07. 无重复字符串的排列组合(回溯)