由catch()保护的Promise返回什么?



我有一个异步函数,它在我的代码开始时被调用,只有当它完成后才会发生进一步的事情。通常是

const initialCheck = () => {
return fetch('https://reqres.in/api/users')
.then(r => {
// do things
return r
})
}
const actualStuff = () => {
console.log('hello')
}
initialCheck()
.then(r => {
actualStuff()
})

这个初始检查的目标是确保HTTP端点(https://reqres.in/api/users)实际上是可访问的。因此,它应该说明连接问题,我的解决方案是catch()可能的错误:

const initialCheck = () => {
return fetch('https://thissitedoesnotexistihopeatleast')
.then(r => {
// do things when the endpoint is available
return r
})
.catch(err => {
// do something when the endpoint is not availble
// nothing is returned
})
}
const actualStuff = () => {
console.log('hello')
}
initialCheck()
.then(r => {
actualStuff()
})

我的问题是:为什么上面的代码可以工作?

catch()被执行(而该函数中的then()没有被执行),它不返回任何东西,尽管.then(r => {actualStuff()})输出了预期的内容(控制台上的hello)。

then()实际接收到什么?(that I don ' treturn)

.catch链接到Promise上会导致Promise:

  • 解析从.catch返回的值,如果.catch返回正常
  • 拒绝,如果.catch本身抛出错误

const chainedPromise = somePromise.catch(() => {
// no errors here
// nothing returned
})

如果.catch肯定没有抛出,那么chainedPromise肯定会解析(而不是拒绝),并且由于没有返回任何内容,chainedPromise将解析为undefined

initialCheck()
.then(r => {
actualStuff()
})

工作,因为initialCheck返回一个Promise,解析(到undefined)。

如果您从.catch返回了一些内容,并且输入了.catch,您将看到它随后链接到.then上:

const initialCheck = () => {
return fetch('https://doesnotexist')
.catch(() => {
return 'foo';
});
}
const actualStuff = (r) => {
console.log(r);
console.log('r is foo:', r === 'foo')
}
initialCheck()
.then(r => {
actualStuff(r);
})

相关内容

  • 没有找到相关文章