首页 > 解决方案 > 如何从 async 数组中获取最终结果?

问题描述

get-video-duration是一个获取视频时长的 npm 模块。


const { getVideoDurationInSeconds } = require('get-video-duration')

// From a local path...
getVideoDurationInSeconds('video.mov').then((duration) => {
  console.log(duration)
})

我想使用此模块从视频路径数组中获取所有视频的总持续时间。


function getTotals(video_Array) {
    let total_duration = 0;
    video_Array.forEach(video => {
        getVideoDurationInSeconds(video).then(duration => {
            total_duration += duration;
            
        })
    })

}

事情是getVideoDurationInSeconds异步的,我不能简单地返回结果。


function getTotals(video_Array) {
    let total_duration = 0;
    video_Array.forEach(video => {
        getVideoDurationInSeconds(video).then(duration => {
            total_duration += duration;
        })
    })
    return total_duration;
}

我怎样才能得到最终结果?先感谢您!

标签: javascriptnode.jsasynchronousnpmpromise

解决方案


创建一个返回承诺的函数,然后使用它来计算总持续时间

function getTotals(video_Array) {
    let video_ArrayPromises=video_Array.map(video=> 
        getVideoDurationInSeconds(video));

    return Promise.all([video_ArrayPromises]).then((values) => {
                  //Calculate TotalDuration
    return duratons.reduce((accumulator, currentValue) => accumulator + currentValue);
    });
}

getTotals(['movie1.mov','movie2.mov']).then(totalDuration => {
    //use total duration
});

推荐阅读