[英]How can I properly create an array and use it outside of the scope in this example?
我已经使用同事包“ db”编写了一些代码。 首先,它获取电影拍摄日的会议列表,然后列出拍摄日会议中捕获的镜头,然后“ 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.