javascript - 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'