根本应用
async函数返回的是一个Promise,可能进行Promise的相干操作,函数外部返回的后果会成为then办法回调函数的参数
async function asyncfunc(){
return "这是一个async函数"
}
asyncfunc()
asyncfunc().then(function(info){console.log(info)})
当函数执行中遇到await,需等异步操作实现,才会执行前面的代码
async function asyncfunc() {
let now = new Date().getTime();
await new Promise((resolve, reject) => {
setTimeout(() => {
resolve()
}, 2000)
})
console.log(new Date().getTime() - now)
}
函数外部错处,返回的promise状态为rejected
async function asyncfunc(){
console.log(err)
}
async函数返回的Promise只有函数外部中await后的异步事件执行完后,才会扭转,除非中途return或者出错
(async function() {
await new Promise((resolve, reject) => {
console.log("第一个await")
resolve()
})
await new Promise((resolve, reject) => {
console.log("第二个await")
resolve()
})
await new Promise((resolve, reject) => {
console.log("第三个await")
resolve()
})
})().then(info=>{console.log("触发then")})
(async function() {
await new Promise((resolve, reject) => {
console.log("第一个await")
resolve()
})
return "执行return"
await new Promise((resolve, reject) => {
console.log("第二个await")
resolve()
})
await new Promise((resolve, reject) => {
console.log("第三个await")
resolve()
})
})().then(info=>{console.log("触发then")})
(async function() {
await new Promise((resolve, reject) => {
console.log("第一个await")
resolve()
})
throw new Error("出错了")
await new Promise((resolve, reject) => {
console.log("第二个await")
resolve()
})
await new Promise((resolve, reject) => {
console.log("第三个await")
resolve()
})
})()
await后的Promise状态变为rejected时,会被catch接管到
(async function() {
await new Promise((resolve, reject) => {
reject("状态变为rejected")
})
})().catch(info => {
console.log(info)
})
任意一个await后的Promise函数变为rejecte,async函数的执行就会中断,若想继续执行,可应用try{}catch(e){}捕捉
(async function() {
await new Promise((resolve, reject) => {
reject("状态变为rejected")
})
await new Promise((resolve, reject) => {
console.log("第二个await")
resolve()
})
})().catch(info => {
console.log(info)
})
(async function() {
try {
await new Promise((resolve, reject) => {
reject("状态变为rejected")
})
} catch (err) {
console.log("捕捉" + err)
}
await new Promise((resolve, reject) => {
console.log("第二个await")
resolve()
})
})().catch(info => {
console.log(info)
})
另一种办法是将await前面的Promise增加catch
(async function() {
await new Promise((resolve, reject) => {
reject("状态变为rejected")
}).catch(info => {
console.log("捕捉" + info)
})
await new Promise((resolve, reject) => {
console.log("第二个await")
resolve()
})
})().catch(info => {
console.log(info)
})
发表回复