Javascript 如何在useffect()中使用wait关键字
我想在useffect中调用几个异步函数,但我不确定如何包含wait关键字来等待它们的结果Javascript 如何在useffect()中使用wait关键字,javascript,reactjs,react-native,Javascript,Reactjs,React Native,我想在useffect中调用几个异步函数,但我不确定如何包含wait关键字来等待它们的结果 // somewhere else func1 and func2 are defined async function func1() {...}; async function func2() {...}; // func1, func2 are imported into file of functional Component ... useEffect(() => { asyn
// somewhere else func1 and func2 are defined
async function func1() {...};
async function func2() {...};
// func1, func2 are imported into file of functional Component
...
useEffect(() => {
async function foo() {
func1();
};
async function bar() {
func2();
}
if (...) {
await Promise.all([foo(), bar()]);
...
}
...
}, [])
...
这给了我
意外保留字“等待”
如何在useEffect中等待异步函数?您可以在useEffect中创建一个匿名函数,并使其类似于异步函数
useEffect(() => {
async function foo() {
func1();
};
async function bar() {
func2();
}
(async function() {
if (...) {
await Promise.all([foo(), bar()]);
...
}
...
})();
}, []);
或者以更干净的方式
useEffect(() => {
async function foo() {
func1();
};
async function bar() {
func2();
}
async function execute() {
if (...) {
await Promise.all([foo(), bar()]);
...
}
...
// any code that you would have normally added
// in useEffect callback will now be a part of execute function
}
execute();
}, [])
这应该是关键:
// somewhere else func1 and func2 are defined
async function func1() {...};
async function func2() {...};
// func1, func2 are imported into file of functional Component
...
useEffect(async () => {
async function foo() {
await func1();
};
async function bar() {
await func2();
}
if (...) {
await Promise.all([foo(), bar()]);
...
}
...
}, [])
...
编辑:也可以直接使用func1和func2:
...
useEffect(async () => {
if (...) {
await Promise.all([func1(), func2()]);
...
}
...
}, [])
...
这是行不通的,执行不是等待在那snippet@andi2.2执行不需要等待。任何逻辑代码都将被写入execute,并且在等待PROMITE后写入的代码行都将等待PROMITE得到解决。此外,如果执行函数调用后有代码,则不能进行useEffect asyncwill回调,直到等待承诺为止;是否已解决?@Stophface正如我在前面的评论中提到的,为了在useEffect中使用异步,您将放入useEffect回调中的所有代码都将进入execute函数,而@CertainPerformance选择了最明显的重复候选代码,在这种情况下,必须使用一个小技巧,即。