async 与 await
async 函数:async function( function return Promise )
①函数的返回值是 promise 对象
② promise 对象的结果由 async函数执行的返回值决定


async function fun(){
return 1
}
const result=fun()
console.log(result)
result.then(
value=>{
console.log('onResolved:',value)
},
reason=>{
console.log('onRejected:',reason)
}
)

async function fun(){
throw 2
}
const result=fun()
console.log(result)
result.then(
value=>{
console.log('onResolved:',value)
},
reason=>{
console.log('onRejected:',reason)
}
)

async function fun(){
return Promise.resolve(3)
}
const result=fun()
console.log(result)
result.then(
value=>{
console.log('onResolved:',value)
},
reason=>{
console.log('onRejected:',reason)
}
)

async function fun(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve(4)
},1000)
})
}
const result=fun()
console.log(result)
result.then(
value=>{
console.log('onResolved:',value)
},
reason=>{
console.log('onRejected:',reason)
}
)

https: //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/async_function
await expression ( value or promise )
①expression 一般是 promise 对象,也可以是其他值
②如果是 promise对象,await 返回的是 Promise 成功的值
③如果是其他值,直接将此值作为 await 的返回值
④await 必须写在 async 中,但 async 中可以没有 await
⑤如果 await 的 promise 失败,就会抛出异常,需要通过 try ... catch...捕获处理
function fn1(){
return new Promise((resolve,reject)=>{
resolve(1)
})
}
function fn2(){
return 2
}
function fn3(){
return Promise.reject(3)
}
async function fn4(){
const value1 = await fn1()
const value2 = await fn2()
console.log("value1:",value1)
console.log('value2:',value2)
try {
const value3=await fn3()
} catch (error) {
console.log("error:",error)
}
}
fn4()
//value1:1
//value2:2
//error:3
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/await
async 与 await:
① async 用于声明一个 function 是异步的,而 await 用于等待一个异步方法执行完成。
② async 是让方法变成异步,await 是等待异步方法执行完成,其实 await 等待的只是一个表达式,这个表达式在官方文档中说的是 Promise 对象,但是它也可以接受普通值。
③ 注意,await 必须在 async 方法中才可以使用,因为 await 访问本身就会造成程序停止阻塞,所以必须在异步方法中才可以调用。
④ async 会将其后的函数(函数表达式或Lambda)的返回值封装成一个 Promise 对象,而 await 会等待这个 Promise 完成,并将其 resolve 的结果返回出来。
function fn1(){
return 'hello fn1'
}
async function fn2(){
return 'hello fn2'
}
function fn3(){
return new Promise((resolve,reject)=>{
resolve("hello fn3")
})
}
async function test(){
const result1 = await fn1()
const result2 = await fn2()
const result3 = await fn3()
console.log("result1:",result1)
console.log("result2:",result2)
console.log("result3:", result3)
}
test()
/**
* result1: hello fn1
result2: hello fn2
result3: hello fn3
*/

浙公网安备 33010602011771号