React Native中TypeScript的sleep方法执行阻塞问题求助
问题原因与解决方案
核心问题:Promise未被resolve
你的sleep函数实现存在错误:在setTimeout的回调中,你只是引用了Promise的resolve函数r,但没有调用它(即r())。这会导致Promise永远处于pending状态,await this.sleep(1000)会一直阻塞,后续代码完全无法执行。
修正后的sleep方法
// 正确写法:调用resolve函数 sleep = (ms: number) => new Promise(r => setTimeout(() => r(), ms)); // 更简洁的等价写法 sleep = (ms: number) => new Promise(r => setTimeout(r, ms));
额外需要修正的代码问题
在getData中直接修改this.state.isLoading = false;是不符合React状态管理规范的——React状态必须通过setState方法修改,直接赋值不会触发组件重新渲染。虽然这不是导致代码卡住的原因,但建议移除该语句,保留最后的setState即可。
修正后的getData方法
getData = async () => { this.setState({isLoading: true}); await this.sleep(1000); const res = await getUser("test") ?? new User("", "", "", null, null, 0, 0); this.setState({user : res, isLoading: false}); }
内容的提问来源于stack exchange,提问作者Kantine
相关产品推荐
相关产品推荐

