async和await两种语法结合:1.让异步代码看起来像同步代码
2.简化异步函数的写法
async函数:1.async函数的返回值为promise对象;
2.promise对象的结果有async函数执行的返回值决定
<script>
// async函数:异步函数
async function fn() {
// return 123;
// 返回普通数据
// 若报错,则返回的Promise对象也是错误的
// throw new Error("出错啦!");
// 若返回的是Promise对象,那么返回的结果就是Promise对象的结果
return new Promise((resolve, reject) => {
// resolve("成功啦!");
reject("失败啦!");
})
}
const result = fn();
// console.log(result);
// 返回的结果是一个Promise对象
// 调用then方法
result.then(value => {
console.log(value);
}, reason => {
console.warn(reason);
});
</script>
await表达式:1.await必须写在async函数中;
2.await右侧的表达式一般为promise对象
3.await返回的是promise成功的值;
4.await的promise失败了,就会抛出异常,需要通过try...catch捕获处理
<script>
//await要放在async里面
const p=new Promise((resolve,reject)=>{
// resolve('成功的数据');
reject('失败啦');
})
async function fn(){
try{
let result=await p;
console.log(result);
}catch(e){
console.log(e);
}
}
//调用函数
fn();
</script>
async和await结合:
const fs = require("fs");
function readSuiYing() {
return new Promise((resolve, reject) => {
fs.readFile("./resources/jsy.md", (err, data) => {
//如果失败
if (err) reject(err);
//如果成功
resolve(data);
})
})
}
function readLiYu() {
return new Promise((resolve, reject) => {
fs.readFile("./resources/ly.md", (err, data) => {
//如果失败
if (err) reject(err);
//如果成功
resolve(data);
})
})
}
function readMoYu() {
return new Promise((resolve, reject) => {
fs.readFile("./resources/qmy.md", (err, data) => {
//如果失败
if (err) reject(err);
//如果成功
resolve(data);
})
})
}
async function main(){
let suiying=await readSuiYing();
let liyu=await readLiYu();
let moyu=await readMoYu();
console.log(suiying.toString());
console.log(liyu.toString());
console.log(moyu.toString());
}
main();