Javascript 在异步方法内抛出时未捕获错误

Javascript 在异步方法内抛出时未捕获错误,javascript,node.js,asynchronous,async-await,try-catch,Javascript,Node.js,Asynchronous,Async Await,Try Catch,当抛出错误时,我使用异步等待并通过try-catch处理错误。method3()未在method1()中捕获它。但是,如果我在中删除了async。method2()foreach我能够捕获method1()中的错误!但是如果我在foreach中删除async,我就不能使用wait,我不能使用wait!有办法解决这个问题吗 class A { async method1(A, B) { return new Promise(async (resolve, reject) =

当抛出错误时,我使用异步等待并通过try-catch处理错误。method3()未在method1()中捕获它。但是,如果我在中删除了async。method2()foreach我能够捕获method1()中的错误!但是如果我在foreach中删除async,我就不能使用wait,我不能使用wait!有办法解决这个问题吗

class A {
    async method1(A, B) {
        return new Promise(async (resolve, reject) => {
            try {
                await this.method2(A, B);

            } catch (error) {
                console.log(error, "error")

            };
        });

    }
    async  method2(A, B, C) {

        await somethingelsecalled();
        Array.forEach(async (segment, index) => {
            result = await somethingcalled()
            this.method3(result);

        });
    }

    method3() {
        throw "error";
    }
}

用for of循环替换foreach解决了这个问题

    class A {
        async method1(A, B) {
            return new Promise(async (resolve, reject) => {
                try {
                    await this.method2(A, B);

                } catch (error) {
                    console.log(error, "error")

                };
            });

        }
        async  method2(A, B, C) {

            await somethingelsecalled();
             for (const [index, segment] of Array.entries()) {
                result = await somethingcalled()
                this.method3(result);

            });
        }

        method3() {
            throw "error";
        }
    }

请不要在
循环中使用
async/await
。这样的forEach
循环有没有其他方法可以在forEach中使用await?
for of
循环的效果更好!但是有什么解释为什么它在早期的方法中不起作用吗?也许这会指导你