JS ждут рекурсивной функции для поиска всех файлов MP3 и Android - PullRequest
1 голос
/ 17 октября 2019

Я хочу получить список всех моих файлов 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'
...