async函数
- 函数的返回值为promise对象
- promise对象的结果由async函数执行的返回值决定
async function main(){
//返回值是非Promise类型的对象,则返回成功
//如果返回的是一个Promise对象,则返回结果根据Promise的返回结果确定,
//如果抛出异常,返回的结果是失败的Promise对象;
}
let result = main()
console.log(result)//结果是promise对象,状态是fulfilled
状态是由函数内部的返回值决定
await表达式
- await右侧的表达式一般为promise对象,但也可以是其他的值
- 如果表达式是promise对象,await返回的是promise成功的值
- 如果表达式是其他值,直接将此值作为await的返回值
注意
- await必须卸载async函数中,但async函数中可以没有await
- 如果await的Promise失败了,就会抛出异常,需要通过try...cathc捕获处理
async function main(){
let p = new Promise((resolve, reject) => {
resolve("OK")
})
//1、右侧为promise类型的数据
let res = await p; //返回OK
//2、右侧为其他类型的数据
let res2 = await 20
//3、如果promise是失败的状态
try{
let res3 = await p
}catch(e){
console.log(e) //如果 Promise返回失败结果,这里可以拿到。
}
console.log(res) //返回20
}
main()
async与await结合实践
const util = require("util")
const mineReadFile = util.promisify(fs.readFile)
async function main(){
let data1 = await mineReadFile("./resource/1.html")
let data2 = await mineReadFile("./resource/3.html")
let data3 = await mineReadFile("./resource/3.html")
consola.log(data1 + data2 + data3)
}
async与await结合发送ajax请求
function sendAJAX(url){
return new Promise((resolve, reject) => {
})
}
//接口地址
let btn = document.querySelector("#btn")
btn.addEventListener("click", async function(){
let result = await sendAJAX("http://......")
console.log(result)
})