Promise入门_async 函数和await表达式
async 函数
1. 函数的返回值为 promise 对象
2. promise 对象的结果由 async 函数执行的返回值决定
返回结果的方式和then方法差不多
async function say(){
////1,如果返回值是一个非Promise类型的数据,那这个方法返回的就是一个成功状态的promise实例
//return "hello";
// //2,如果返回的是一个promise实例,那这个函数的返回值就是这个promise实例的状态。
// return new Promise((resolve,reject)=>{
// reject("no");
// });
//3,抛出异常
throw "oh no";
}
let result=say();
result.then(value=>{},reason=>{});
console.log(result);
await 表达式
主要用于对promise实例的结果做一个获取作用。
1. await 右侧的表达式一般为 promise 对象, 但也可以是其它的值
2. 如果表达式是 promise 对象, await 返回的是 promise 成功的值
3. 如果表达式是其它值, 直接将此值作为 await 的返回值
注意
1. await 必须写在 async 函数中, 但 async 函数中可以没有 await
2. 如果 await 的 promise 失败了, 就会抛出异常, 需要通过 try...catch 捕获处理
async function say(){
let p=new Promise((resolve,reject)=>{
resolve("hello");
});
// //1,右侧为promise实例成功的情况
// let r1=await p;
// console.log(r1);
// //2,右侧为其它数据类型的情况
// let r2=await "oh my god";
// console.log(r2);
//2,右侧为其promise实例失败的情况
try{
let r3=await new Promise((resolve,reject)=>{reject("失败")});
}catch(error){
console.log(error);
}
}
let result=say();
async 和await结合使用练习:
let fs=require("fs");
fs.readFile("./resource/1.html",(error,data)=>{
if(error) throw error;
fs.readFile("./resource/2.html",(error2,data2)=>{
if(error2) throw error2;
fs.readFile("./resource/3.html",(error3,data3)=>{
console.log(data+data2+data3);
});
});
});
上面这样写很麻烦。
let fs=require("fs");
const uitl=require("util");
const mineReadFile=uitl.promisify(fs.readFile);
async function main(){
try{
let d1=await mineReadFile("./resource/1.html");
let d2=await mineReadFile("./resource/2.html");
let d3=await mineReadFile("./resource/3.html");
console.log(d1+d2+d3);
}catch(err){
console.log(err);
}
}
main();