关于await使用中错误的处理node
// 普通函数 function fuc() { return 27 } console.log(fuc()); // 27 //async函数 async function firstAsync() { return 27 } console.log(firstAsync()) // Promise {<resolved>: 27} // 返回了一个promise对象,将27返回到resolve里面 // 至关于 --> async function firstAsync() { return Promise.resolve(27) } firstAsync().then(val => { console.log(val) // 27 }) console.log(firstAsync() instanceof Promise) // true 能够对async返回的对象进行判断
下面函数如何能够按照顺序执行?promise
async function firstAsync() { // 声明异步操做,执行完毕以后才能执行下面的函数 let promise = new Promise((resolve,reject) => { setTimeout(() => { resolve('now it is done') }, 1000) }) // 执行异步操做 promise.then(val => { console.log(val) }) console.log(2) return 3 } firstAsync().then(val => { console.log(val) }) //2 //3 //now it is done
使用await
异步
async function firstAsync() { // 声明异步操做,执行完毕以后才能执行下面的函数 let promise = new Promise((resolve,reject) => { setTimeout(() => { resolve('now it is done') }, 1000) }) // 执行异步操做 let result = await promise console.log(result) console.log(2) return 3 } firstAsync().then(val => { console.log(val) }) //now it is done //2 //3
await promise
是一个表达式,后面必需要跟promise
对象,若是不是会自动处理成promise
对象async
console.log(await promise) //now it is done ---有返回值 console.log(await 40) //40 console.log(await promise.resolve(40)) //40
不然会报错函数
若是不对await
进行错误处理,则会阻断程序执行。学习
await
使用中,若是promise
对象返回resolve
,则返回什么值就是什么值,包括undefined
。spa
可是若是返回reject
,则返回值返回undefined
,从catch
函数中能够接收到。code
catch
里面处理,不须要对await
返回值进行判断try-catch
是处理同步报错的问题,若是await
函数以后有报错,则没法判断报错来源// 定义一个函数,返回promise对象 function firstAsync() { return new Promise((resolve,reject) => { const a = 0; if(a){ resolve(1) }else{ reject(2) } }) } async function hello () { // 判断是否有报错 try{ const res = await firstAsync() console.log(res) }catch(err){ console.log("err") console.log(err) } }
await
函数进行异步错误处理// 定义一个函数,返回promise对象 function firstAsync() { return new Promise((resolve,reject) => { const a = 0; if(a){ resolve(1) }else{ reject(2) } }) } async function hello () { // 判断是否有报错 const res = await firstAsync().catch(err =>{ console.log("err") console.log(err) }) if(res){ //TODO } } hello();
await
调用只须要对返回值进行判断便可,不须要单独进行catch
处理const awaitWrap = () => { let promise = new Promise((resolve,reject) => { const a = 0; if(a){ resolve(1) }else{ reject(2) } }) return promise .then(data => [data, null]) .catch(err => { // 通用错误处理写这里 TODO return [null,err] }) } async function he() { const [data, err] = await awaitWrap(); if(data){ //若是是reslove走这里 console.log(data) }else{ //若是是reject走这里 console.log("error") console.log(err) //特殊错误处理写这里 TODO } } he();