Javascript 如何在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

我想在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(() => {
    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选择了最明显的重复候选代码,在这种情况下,必须使用一个小技巧,即。