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)
  }  
}

promise ,async 小记的更多相关文章

  1. vue使用技巧:Promise + async + await 解决组件间串行编程问题

    业务场景描述 大家都通过互联网投递过简历,比如在智联.58.猎聘等平台.投递心仪的职位前一般都需要前提创建一份简历,简历编辑界面常规的布局最上面是用户的个人基本信息,如姓名.性别.年龄.名族等,接着是 ...

  2. nodejs 回调地狱解决 promise async

    nodejs毁掉地狱是一直被人诟病的,以下总结一下解决毁掉地狱的一些方法.(暂时研究的比较浅) 1.promise promise模式在任何时刻都处于以下三种状态之一:未完成(unfulfilled) ...

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

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

  4. promise async await使用

    1.Promise (名字含义:promise为承诺,表示其他手段无法改变) Promise 对象代表一个异步操作,其不受外界影响,有三种状态: Pending(进行中.未完成的) Resolved( ...

  5. promise async

    最简用  promise let res = function () { return new Promise((resolve, reject) => { // 返回一个promise set ...

  6. Promise,async/await解决回调地狱

    先说一下async的用法,它作为一个关键字放到函数前面,用于表示函数是一个异步函数,因为async就是异步的意思, 异步函数也就意味着该函数的执行不会阻塞后面代码的执行. 写一个async 函数 as ...

  7. ES6 class setTimeout promise async/await 测试Demo

    class Person { async getVersion () { return new Promise((resolve, reject) => { setTimeout(functio ...

  8. lazy evaluation and deferring a computation await promise async

    Promise - JavaScript | MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_ ...

  9. promise, async和await

    最开始实现异步的方法:回调函数 method1(function(err, result) { if (err) { throw err; } method2(function(err, result ...

随机推荐

  1. webpack 打包html文件

    webpack 打包html文件 webpack.config.js配置文件内容为: /** * loader: 1. 下载 2. 使用(配置) * plugins:1. 下载 2. 引入 3.使用 ...

  2. elasitcsearch单机版安装

    1.下载压缩包 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.2.tar.gz 2.解压修改配置文件 c ...

  3. [luogu4607]反回文串

    参考ARC064F 令$h(n)=\begin{cases}n(n为奇数)\\\frac{n}{2}(n为偶数)\end{cases}$,$f(n)$定义与ARC064F相同,答案即$\sum_{d| ...

  4. cube+FreeRTOS联合开发采坑笔记

    加了看门狗之后不断重启的可能 原因: 任务容量分配不足,在"FreeRTOSConfig.h"的配置中,有个configTOTAL_HEAP_SIZE中将堆大小调到最大.

  5. javascript-初级-day03自定义属性

    day01-自定义属性应用 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type ...

  6. Vulnhub-Empire: Breakout题解

    Vulnhub-Empire: Breakout题解 这是Empire系列的靶机Breakout,地址:Vulnhub-EMPIRE: BREAKOUT 目标扫描 使用arp-scan 命令识别靶机I ...

  7. CF1004D Sonya and Matrix

    不要想当然. 考虑到我们一定有存在个数为\(4\)的倍数的数. 否则第一个不是的数即为\(x\). 那么我们设\(b\)为所有的数的最大值. 那么显然有\(|n - x| + |m - y| = b\ ...

  8. Codeforces Gym 101221G Metal Processing Plant(2-SAT)

    题目链接 题意:有 \(n\) 个元素,第 \(i\) 个数与第 \(j\) 个数之间有一个权值 \(d_{i,j}\),\(d(i,j)=d(j,i)\). 定义函数 \(D(S)=\max\lim ...

  9. Atcoder Grand Contest 001E - BBQ Hard(组合意义转化,思维题)

    Atcoder 题面传送门 & 洛谷题面传送门 Yet another 思维题-- 注意到此题 \(n\) 数据范围很大,但是 \(a_i,b_i\) 数据范围很小,这能给我们什么启发呢? 观 ...

  10. 【5】蛋白质组学鉴定定量软件之PD

    目录 1.简介 2.安装与配置 3.分析流程 4.结果 1.简介 PD全称Proteome Discoverer,是ThermoFisher在2008年推出的商业Windows软件,没错,收费,还不菲 ...