一、 async 函数
- 函数的返回值为 promise 对象
- promise 对象的结果由 async 函数执行的返回值决定
async function fn() {
return Promise.resolve(4)
}
const result = fn()
console.log(result)
二、 await 表达式
- await 右侧的表达式一般为 promise 对象, 但也可以是其它的值
- 如果表达式是 promise 对象, await 返回的是 promise 成功的值
- 如果表达式是其它值, 直接将此值作为 await 的返回值
function fn1() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(6)
}, 2000)
})
}
async function fn2() {
const result = await fn3()
console.log(result)
}
三、注意:
- await 必须写在 async 函数中, 但 async 函数中可以没有 await
- 如果 await 的 promise 失败了, 就会抛出异常, 需要通过 try…catch 来捕获处理
async function fn1() {
throw 6
}
async function fn2() {
try {
const result = await fn1()
console.log('fn1 result=', result)
} catch (error) {
console.log('error', error)
}
}
fn2()
四、async/await、promise、ajax 结合使用
function ajax(url) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest()
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 300) {
resolve({ data: xhr.responseText || xhr.responseXML })
} else {
reject({ status: xhr.status, msg: '请求失败咯!' })
}
}
}
xhr.open('get', url)
xhr.send()
})
}
async function test() {
const res = await ajax('http://localhost:3000/test_get?name=kobe&age=42')
console.log(res)
}
test()
相关文章
手写 Promise
原生 ajax 封装