promise和async await捕获异常的区别

发布于 2022-09-13 00:53:43 字数 404 浏览 41 评论 0

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里面的过程都是同步,都应该被捕获到的

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

离笑几人歌 2022-09-20 00:53:43
let p; // p is a Promise instance

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

//

迷爱 2022-09-20 00:53:43

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

画尸师 2022-09-20 00:53:43

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()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文