gpt4 book ai didi

javascript - 如何正确创建数组并在本示例的范围之外使用它?

转载 作者:行者123 更新时间:2023-12-03 02:15:21 26 4
gpt4 key购买 nike

我使用同事包“db”编写了一些代码。首先它获取电影拍摄日的 session 列表,然后列出拍摄日 session 中捕获的镜头,然后“getCapture”函数获取每个镜头的镜头信息。我正在尝试使用此 getCapture 函数来读取镜头信息(即名称、大小、主题)以及 ['Node Information']['NAME'],以便仅获取镜头名称。我想在一天中的所有训练和他们的所有镜头中做到这一点。我已经弄清楚如何执行此操作并使用 "console.log(captureInfo._data['Node Information']['NAME'])" 返回下面示例中的名称列表。但是我希望能够在此范围之外的数组中使用这些结果。当我尝试像第二个示例中那样推送这些结果时,它会一遍又一遍地打印出多个名称副本。我希望能够将拍摄名称添加到数组中,以便可以在整个范围之外使用该数组,只是不知道该怎么做。

仅记录和列出所有镜头一次,但不将结果放入变量/数组的示例:

      var sessionURL = ("X:\\Private_LowPerf\\TESTING_DATA\\Capture day 1.file");

async function main (){
var captures = [];
var captureInfo = [];
var captureNames = [];

if (sessionURL){
var sessions = await _db.listSessions(sessionURL);
sessions.forEach(async (item) => {
if(sessions){
var captures = await _db.listCaptures(item);
}

captures.forEach(async (item) => {
if(sessions){
var captureInfo = await _db.getCapture(item.path);

console.log(captureInfo._data['Node Information']['NAME']);

}
})

})
}
}
main();

示例不起作用,因为我认为由于范围问题它打印出太多名称副本:

async function main (){
var captures = [];
var captureInfo = [];
var captureNames = [];

if (sessionURL){
var sessions = await _db.listSessions(sessionURL);
sessions.forEach(async (item) => {
if(sessions){
var captures = await _db.listCaptures(item);
}

captures.forEach(async (item) => {
if(sessions){
var captureInfo = await _db.getCapture(item.path);

}
captureNames.push(captureInfo._data['Node Information']['NAME']);
console.log(captureNames);

})

})
}
}
main();

最佳答案

您需要将控制台日志放在循环之外,否则,每次执行循环时,您都会打印当前项目以及之前的项目。

Array.prototype.forEachAsync = async function(cb){
for(let x of this){
await cb(x);
}
}


async function main() {
var captures = [];
var captureInfo = [];
var captureNames = [];

if (sessionURL) {
var sessions = await _db.listSessions(sessionURL);
await sessions.forEachAsync(async (item) => {
if (sessions) {
var captures = await _db.listCaptures(item);
}

await captures.forEachAsync(async (item) => {
if (sessions) {
var captureInfo = await _db.getCapture(item.path);
captureNames.push(captureInfo._data['Node Information']['NAME']);
}

})

})


console.log(captureNames);
}
}
main();
<小时/>

编辑:当您处理异步函数时,您需要确保在调用 console.log 之前执行循环。这就是为什么我们需要 forEachAsync

关于javascript - 如何正确创建数组并在本示例的范围之外使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49393228/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com