React Native中async/await未按预期工作,求助异步执行顺序问题
问题分析与解决方案
嘿,这问题我熟!你遇到的核心问题是:你的first()函数没有返回一个Promise对象,而await关键字只有在等待Promise的时候才会真正暂停执行、等待异步操作完成。
为什么当前代码不生效?
你现在的first()只是执行了一个setTimeout,但没有返回任何异步容器。当你用await this.first()时,因为first()没返回Promise,await会把它当成一个已经“完成”的同步值,直接跳过等待,立刻执行后面的this.second()——这就是为什么second()会直接跑出来,完全不等那1秒延迟。
修复方案:让first()返回Promise
只需要把first()改成返回一个Promise,把setTimeout的逻辑包在里面,当超时完成后调用resolve(),告诉await异步操作已经结束:
first() { // 返回一个Promise return new Promise((resolve) => { setTimeout(() => { console.log('I am First CALL afer 1 second'); resolve(); // 标记异步操作完成 }, 1000); }); } second() { console.log("SEcond methof is called"); } async getMoviesFromApi() { try { await this.first() ; // 现在会等待1秒,直到first()的Promise resolve this.second() ; // 这时候才会执行 } catch (error) { console.error(error); } }
验证效果
现在调用getMoviesFromApi(),你会看到:
- 等待1秒后,打印
I am First CALL afer 1 second - 紧接着打印
SEcond methof is called
完全符合你预期的顺序啦!
内容的提问来源于stack exchange,提问作者Raam Meena
相关产品推荐
相关产品推荐

