函数的返回值为promise对象
;
promise对象的结果由async函数执行的返回值决定;
async function main() {
//1、如果返回值是一个非Promise类型的数据,那结果就是成功的promise对象
// return 521
}
const result = main();
console.log(result);
async function main() {
// 2、如果返回的是一个Promise对象,return的结果决定main函数的返回状态
return new Promise((resolve, reject)=>{
//resolve("ok");
reject("err")
})
}
const result = main();
console.log(result);
async function main() {
//3、抛出异常,返回的结果就是抛出的值
throw "Oh NO"
}
const result = main();
console.log(result);
注意:
await必须写在async函数中
,但是async函数中可以没有await;抛出异常
,需要通过try..catch
捕获处理 async function main() {
//1、右侧为promise的情况
const pro1 = new Promise((resolve, reject) => {
resolve("ok")
});
const result1 = await pro1;
console.log(result1);//ok
// 2、右侧为其他类型的数据
const result2 = await 20;
console.log(result2);//20
// 3、如果promise是失败的状态
const pro2 = new Promise((resolve, reject) => {
reject("error")
})
try {
const result3 = await pro2;
} catch (err) {
console.log(err);//error
}
}
main();
const fs = require("fs");
const util=require("util");
const readFile=util.promisify(fs.readFile)
async function main(){
// 读取第一个文件的内容
try {
const data1=await readFile("./resource/1-async1.txt");
const data2=await readFile("./resource/2-async.txt");
const data3=await readFile("./resource/3-async.txt");
console.log(data1, data2, data3);
}catch (err){
console.log(err);
}
}
main()
结合ajax请求:
<body>
<button id="btn">点击获取一段名言</button>
<script src="../js/ajax.js"></script>
<script type="text/javascript">
const btn = document.querySelector("#btn");
btn.addEventListener("click", async () => {
try {
const result = await sendAjax();
console.log(result);
} catch (err) {
console.log(err);
}
}, false);
function sendAjax() {
return new Promise((resolve, reject) => {
$.ajax({
url: "https://api.apiopen.top/api/sentences",
}).then(res => {
resolve(res);
}).catch(err => {
reject(err)
})
})
}
</script>
</body>