我使用同事包" db"编写了一些代码。首先,它会获得一个电影拍摄日的会话列表,然后列出拍摄日会话中拍摄的照片,然后是#34; getCapture"函数获取每个镜头的镜头信息。我正在尝试使用这个getCapture函数来读取镜头'信息(即姓名,大小,主题)以及['节点信息'] [' NAME'],以便仅获取镜头名称。我希望在当天的所有会议和所有镜头中都这样做。我已经弄清楚如何执行此操作并使用" console.log(captureInfo._data ['节点信息'] [&]返回以下示例中的名称列表#39; 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();
答案 0 :(得分:1)
您需要将控制台日志放在循环之外,否则,每次循环执行时,您将打印当前项目以及之前的项目。
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 的原因