Javascript 如何使useffect中的异步函数按顺序执行?
控制台1,2,4,5,3,6下方的代码。如何让它安慰1,2,3,4,5,6? 演示:Javascript 如何使useffect中的异步函数按顺序执行?,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,控制台1,2,4,5,3,6下方的代码。如何让它安慰1,2,3,4,5,6? 演示: constfoo=()=>{ 常量睡眠=(计时器)=>{ 返回新承诺((res)=>{ 设置超时(res、定时器) }) } React.useffect(()=>{ 控制台日志(1) const foo=async()=>{ 控制台日志(2) 等待睡眠(1000); 控制台日志(3) } foo(); }, []); React.useffect(()=>{ 控制台日志(4) const foo=async(
constfoo=()=>{
常量睡眠=(计时器)=>{
返回新承诺((res)=>{
设置超时(res、定时器)
})
}
React.useffect(()=>{
控制台日志(1)
const foo=async()=>{
控制台日志(2)
等待睡眠(1000);
控制台日志(3)
}
foo();
}, []);
React.useffect(()=>{
控制台日志(4)
const foo=async()=>{
控制台日志(5)
等待睡眠(1000);
控制台日志(6)
}
foo();
}, []);
返回111
}
如果将Foo设为一个异步
函数,则可以使用on承诺同步执行。据我所知,您不能影响调用useffect
的顺序。在您的情况下,我建议使用单个useffect
调用。我还建议使用单个useffect,您可以将useCallback((async()=>…)(),[…])
的结果传递给useffect,这样您就可以使用wait/async
。使用状态
切换来运行效果。是的,你说得对,谢谢@Tracer69
const Foo = () => {
const sleep = (timer) => {
return new Promise((res) => {
setTimeout(res, timer)
})
}
React.useEffect(() => {
console.log(1)
const foo = async () => {
console.log(2)
await sleep(1000);
console.log(3)
}
foo();
}, []);
React.useEffect(() => {
console.log(4)
const foo = async () => {
console.log(5)
await sleep(1000);
console.log(6)
}
foo();
}, []);
return <div>111</div>
}