async和await的用法
需求一: 掷一个骰子打印出骰子的大小
思路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();
需求三: 掷二个骰子猜出骰子的大小。默认猜大都成功后打印猜对了(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();
需求四: 掷二个骰子猜出骰子的大小。默认猜大只要一个成功就打印猜对了(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