likes
comments
collection
share

async和await的用法

作者站长头像
站长
· 阅读数 30

需求一: 掷一个骰子打印出骰子的大小

思路1:promise.then()方法

function fn() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      let n = parseInt(Math.random() * 6 + 1, 10);
      resolve(n);
    }, 3000);
  });
}
fn().then(
  (x) => { console.log("骰子的点数是" + x)},
  (y) => { console.log("摇骰子失败了")}
  );

思路2: 使用async,await

async是一个异步函数的标识符,返回的值是一个异步的promise对象。await等待返回的是一个含有promise对象的函数。需要注意的是:await只能在async函数中。

function fn() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      let n = parseInt(Math.random() * 6 + 1, 10);
      resolve(n);
    }, 3000);
  });
}
async function test(){   //test是一个异步函数
  let n=await fn()  //3s后值赋给n
  console.log(n)
}
test()

需求二: 掷一个骰子猜出骰子的大小。默认猜大并使用try catch方法捕获错误

function fn(猜测) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      let n = parseInt(Math.random() * 6 + 1, 10);
      if (n > 3) {
        if (猜测 === "大") {
          resolve(n);
        } else {
          reject(n);
        }
      } else {
        if (猜测 === "小") {
          resolve(n);
        } else {
          reject(n);
        }
      }
    }, 1000);
  });
}
async function test() {
// 使用try catch 进行错误捕获
  try {
    let t = await fn("大"); //先执行await 3s之后将值赋给t
    console.log("赢了也", t);
  } catch (error) {
    console.log("猜错了", error);
  }
}
test();

async和await的用法

需求三: 掷二个骰子猜出骰子的大小。默认猜大都成功后打印猜对了(promise.all用法

function fn(猜测) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      let n =6 //parseInt(Math.random() * 6 + 1, 10);
      if (n > 3) {
        if (猜测 === "大") {
          resolve(n);
        } else {
          reject(n);
        }
      } else {
        if (猜测 === "小") {
          resolve(n);
        } else {
          reject(n);
        }
      }
    }, 1000);
  });
}
async function test() {
  try {
    let t = await Promise.all([fn('大'),fn('大')]); //promise.all用法,这里t打印是一个数组
    console.log("猜对了", t);
  } catch (error) {
    console.log("猜错了", error);
  }
}
test();

async和await的用法

需求四: 掷二个骰子猜出骰子的大小。默认猜大只要一个成功就打印猜对了(promise.race用法

function fn(猜测) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      let n =6 //parseInt(Math.random() * 6 + 1, 10);
      if (n > 3) {
        if (猜测 === "大") {
          resolve(n);
        } else {
          reject(n);
        }
      } else {
        if (猜测 === "小") {
          resolve(n);
        } else {
          reject(n);
        }
      }
    }, 1000);
  });
}
async function test() {
  try {
    let t = await Promise.race([fn('大'),fn('大')]); //promise.all用法,这里t打印是一个数组
    console.log("猜对了", t);
  } catch (error) {
    console.log("猜错了", error);
  }
}
test();
转载自:https://juejin.cn/post/6902704804070752263
评论
请登录