首页 > 解决方案 > JS 等待一个递归函数来查找 Android 上的所有 MP3 文件

问题描述

我想检索我所有 MP3 文件的列表并仅在搜索完成时返回列表,我使用此代码,但它没有按预期工作:

(它在 NativeScript 上运行)

const fs = require("tns-core-modules/file-system");
const root = android.os.Environment.getExternalStorageDirectory().getAbsolutePath().toString();
let retrievedData = [];

export async function fileRetriever( mode , path=root ) {

    retrievedData = [];

    console.log('start');
    if ( mode == 'songs' ) retrievedData = await songSeeker();
    console.log('should be received');
    console.log(retrievedData);
    console.log('stop');

    return retrievedData;

}

function songSeeker ( path = root ) {

    let documents = fs.Folder.fromPath( path );

    documents.getEntities()
    .then( ( entities ) => {
        entities.forEach( ( entity ) => {

            // ------ catch on Folder
            if ( fs.Folder.exists( entity.path ) ) {
                songSeeker ( entity.path );

            // ------ catch on File
            } else if ( entity.extension == '.mp3' )  {
                let tmpData = { 
                    title: entity.name , 
                    path: entity.path 
                };
                retrievedData.push( tmpData );
            }

        } );

    } ).catch( ( err ) => {
        console.log(err.stack);
    } );

    return retrievedData;
}

我希望得到完整的列表,但它只返回第一个文件!

结果是:

JS: 'start'
JS: 'should be received'
JS: [ { title: 'Hatef music.mp3',
JS:     path: '/storage/emulated/0/Hatef music.mp3' },
JS:   [length]: 1 ]
JS: 'stop'

标签: javascriptasync-await

解决方案


推荐阅读