reactjs - 有条件地链接承诺不起作用
问题描述
我正在使用带有 Typescript 的 React 并具有以下功能:
const saveData = (): Promise<any> => {
const promise = new Promise((s:any,f:any) => s(true))
if (true) {
promise.then(() => 5)
}
return promise
}
然后我将它作为处理程序道具传递给某个组件:
<Component save={() => {saveData().then(a => console.log)}}
这总是true
在应该记录的时候记录5
,为什么?我如何有效地链接这些承诺。我在这里做错了什么?
这是一个代码sandbox.io 示例:
解决方案
then
不会更改调用它的承诺,它会返回一个您忽略的新承诺。要么存回去,promise
要么直接退回
const saveData = (): Promise<any> => {
const promise = new Promise((s:any,f:any) => s(true))
if (true as boolean) { // as boolean to make ts not complain about unreachable code
return promise.then(() => 5)
}
return promise
}
还可以考虑将 async/await 与 Promise 一起使用,以获得更好的编码体验:
const saveData = async (): Promise<any> => {
await Promise.resolve();
if (Math.random() > 0.5) {
return 5
}
return 0;
}
推荐阅读
- c++ - 通过结构在 Rust 中使用 OpenGL 方法而不是全局访问它们有什么优势?
- javascript - 添加元素时如何更改动态页面上的 DOM?
- python-3.x - 使用 Python 3.8 将时间戳插入雪花
- javascript - Flask/Javascript - 将图像发布到服务器,然后将图像作为数据 URL 读取
- flutter - 使用 dio 3.0.10 时出现 CERTIFICATE_VERIFY_FAILED
- solr - 为什么我在 Solr 中搜索部分单词时没有得到结果?
- discord.py - 我写的代码中 int 类出错的原因是什么?
- c# - 上传/获取 Blob - 在 .NET Core 中使用 Azure 存储帐户创建容器
- encryption - 为什么 RSA 加密块上出现间歇性解密错误?
- python - Django HTML 下拉菜单