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()
uj5u.com熱心網友回復:
這是一個經典,您正在做的是在您的節點 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),以便稍后將其過濾掉。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/344599.html
標籤:javascript 节点.js 异步 异步等待 承诺
