[英]Promise JavaScript Returning Empty Array
createFolder()
函数返回一个空数组。 我不确定我做错了什么,但它需要返回project_array
的项目
function get_project_folders(){
return new Promise((resolve, reject)=>{
fs.readdir(__dirname + '/projects', (error, data1)=>{
if(error){
reject(console.log(`Error. Unable to read directory - ${error}`))
}else{
resolve(data1)
}
})
})
}
async function createFolder(){
let list_of_projects = await get_project_folders()
let project_array = []
return new Promise((resolve, reject)=>{
for(let project of list_of_projects){
let splitProject = project.split("-")
fs.readdir(__dirname + `/projects/${splitProject[0]}-${splitProject[1]}`, (error, data1)=>{
if(error){
console.log('Error. Unable to read directory.')
}else{
project_array.push({circuit: splitProject[0], fuse: splitProject[1], pole: data1})
}
})
}
resolve(project_array)
})
}
async function testIt(){
let folderData = await createFolder()
console.log(folderData)
}
testIt()
这是一个经典,您正在做的是在您的节点 fs 异步方法解决之前使用空数组解决承诺。 试试这个:
async function createFolder(){ const list_of_projects = await get_project_folders(); const result = await Promise.all( list_of_projects.map(project => new Promise((resolve, reject) => { const splitProject = project.split("-"); fs.readdir(__dirname + `/projects/${splitProject[0]}-${splitProject[1]}`, (error, data1) => { if(error){ console.error('Error. Unable to read directory.'); resolve( null ); } else { resolve({ circuit: splitProject[0], fuse: splitProject[1], pole: data1 }); } }); }); // Filter out the errors that resolved as `null` return result.filter( Boolean ); }
本质上,包装每个fs.
调用一个promise,然后使用Promise.all
生成一个promise 数组。 因为Promise.all
需要解决所有问题才能解决,所以请确保在出现错误时甚至解决 - 只需返回一些错误(在我的情况下为null
),以便稍后将其过滤掉。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.