React中如何创建每次调用都执行的方法且无需修改服务代码?
解决方案:无需修改服务代码,让RunTest每次调用都执行
问题根源在于你当前的myMethod是RunTest()执行后返回的已决议Promise,模块初始化时就会执行一次RunTest,后续所有await myMethod拿到的都是同一个结果,不会再触发RunTest逻辑。
你可以通过将myMethod改为自定义thenable对象的方式解决,完全不需要修改服务中的代码:
async function RunTest() { // 保留你的原有逻辑 return /* 你的返回值 */; } // 替换原来的 export const myMethod = RunTest(); export const myMethod = { then(resolve, reject) { // 每次触发then时,重新执行RunTest RunTest().then(resolve).catch(reject); } };
原理说明
await操作符不仅支持Promise,还支持任何带有then方法的对象(即thenable)。- 每次执行
await myMethod时,JS引擎会自动调用这个对象的then方法,并传入resolve/reject回调。 - 我们在自定义的
then方法里重新调用RunTest(),这样每次await都会触发RunTest的完整逻辑,返回全新的结果。
验证效果
比如给RunTest加个日志:
async function RunTest() { console.log("RunTest执行了"); return "新的客户端实例"; }
此时每次调用服务中的getValue,控制台都会打印"RunTest执行了",而不是仅在初始化时打印一次。
内容的提问来源于stack exchange,提问作者Arash EM
相关产品推荐
相关产品推荐

