0

所以基本上我在 start 函数中推送一个名为 TripsData 的 ArrayList 中的值,但是一旦我退出函数,它就会变空,所以我不能进一步超出。旅行只是一个数组[1,2,3,4]

代码如下...

const TripsData = []; // I need to push data in this array
await trips.forEach((trip) => {
    async function start() {
        const url = await TripMedia.findOne({  // i get my url here
            where: { tripID: trip },
        })
            .then((result3) => {
                const url = result3.mediaURL;
                return url;
            })
            .catch((error) => {
                console.log(error);
            });

        const subject = await TripDetails.findOne({ // i get my subject here
            where: { tripID: trip },
        })
            .then((result3) => {
                const subject = result3.subject;
                return subject;
            })
            .catch((error) => {
                console.log(error);
            });
        
        TripsData.push({
            tripId: trip,
            mediaURL: url,
            subject: subject,
        });   // The value is getting pushed here
    }
    start();
});
console.log(TripsData) // If i try to get data here its not present

Reply.push({
    "locationId":location,
    "locationName": dict[location],
    "trips": TripsData
}) // so the value of tripsData is like [] only ... how to get data

价值观即将到来

TripsData.push({
    tripId: trip,
    mediaURL: url,
    subject: subject,
});

但是 forEach 之外的值会变空吗?问题是为什么会这样以及如何解决

提前感谢您的上帝级帮助

4

2 回答 2

1

你误解了代码。第二个console.log在执行之后不会运行function,但在此之前,因为startasync并且你不await为它。这意味着 start 被添加到事件循环中,即使trips.forEach被等待并执行,function内部也不会被等待。因此,从技术上讲,第二个控制台日志在 之后forEach但在任何start调用完成之前执行。

在此处输入图像描述

于 2020-09-23T04:25:57.607 回答
0

您的代码中需要更正:您将 start 定义为异步函数,但在调用它时并未等待它,并且由于仅应在异步函数内部调用 await,因此您需要使 forEach 回调异步。

await trips.forEach(async (trip) => {
    async function start() {
        
        return TripsData.push({
            tripId: trip,
            mediaURL: url,
            subject: subject,
        });   // The value is getting pushed here
    }
    await start();
});
于 2020-09-23T04:40:55.700 回答