promise和async await捕获异常的区别

yyds
  • 15
function f() {
try {
   new Promise((resolve,reject)=>
    {
    reject('出错了');
    })
  } catch(e) {
    console.log(e)
  }
}
f()
async function f() {
  try {
    await new Promise((resolve,reject)=>
    {
    reject('出错了');
    })
  } catch(e) {
    console.log(e)
  }
}
f()

为什么改成await/async后,执行f()才能在catch中捕获到错误???
我理解try里面的过程都是同步,都应该被捕获到的

回复
阅读 1k
3 个回答
let p; // p is a Promise instance

try {
  await p;
} catch (err) {
  // error!
}

// 👆 is simlar to 👇

p.catch((err) => {
  // error!
});

不存在 XX里面的过程都是同步 这种说法,异步好比污染,你不能说放到某个容器的水一定不会被污染,倒是可以说放到某个容器里的水肯定会被污染。
Promise 初始化时传入的执行器函数,会被放到下一个事件循环的开头执行,是异步的。

promise传入的参数会立即执行,await 等待promise成功的异步结果
列如:

function fetch (options) {
    return new Promise((resolve, reject) => {
        const instance = axios.create({ // 创建axios实例
        })
        instance.interceptors.request.use() // 做axios拦截器
        // 调用接口
        instance(options).then(({data}) => {
            resolve([null,data])
        }).catch((error) => {
           reject([error])
        })
     })
    }
axync fun(){
 await fetch({url:'xxx'})
}
fun()
你知道吗?

宣传栏