catch() return 保护的 Promise 是什么意思?
What does a Promise guarded by a catch() return?
我有一个在我的代码开头调用的异步函数,只有当它完成时,才会发生进一步的事情。它通常类似于
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()
没有),它没有 return 任何东西,尽管 .then(r => {actualStuff()})
输出了预期的内容( hello
在控制台上)。
then()
实际收到了什么? (那个我没有return
)
链接到 Promise 上的 .catch
将产生一个 Promise:
- 解析为
.catch
返回的值,如果.catch
returns正常
- 如果
.catch
本身抛出错误 ,则拒绝并返回错误
所以
const chainedPromise = somePromise.catch(() => {
// no errors here
// nothing returned
})
如果 .catch
肯定不会抛出,那么 chainedPromise
肯定会解析(而不是拒绝),并且由于没有任何返回,chainedPromise
将解析为 undefined
.
所以
initialCheck()
.then(r => {
actualStuff()
})
之所以有效,是因为 initialCheck
returns 解决了(到 undefined
)的 Promise。
如果您从 .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);
})
我有一个在我的代码开头调用的异步函数,只有当它完成时,才会发生进一步的事情。它通常类似于
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()
没有),它没有 return 任何东西,尽管 .then(r => {actualStuff()})
输出了预期的内容( hello
在控制台上)。
then()
实际收到了什么? (那个我没有return
)
链接到 Promise 上的 .catch
将产生一个 Promise:
- 解析为
.catch
返回的值,如果.catch
returns正常 - 如果
.catch
本身抛出错误 ,则拒绝并返回错误
所以
const chainedPromise = somePromise.catch(() => {
// no errors here
// nothing returned
})
如果 .catch
肯定不会抛出,那么 chainedPromise
肯定会解析(而不是拒绝),并且由于没有任何返回,chainedPromise
将解析为 undefined
.
所以
initialCheck()
.then(r => {
actualStuff()
})
之所以有效,是因为 initialCheck
returns 解决了(到 undefined
)的 Promise。
如果您从 .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);
})