1
我在節點上寫我自己的博客平臺。我有一堆代碼,執行以下操作:從以前的promise.all返回的數組,鏈接promise.all
- 從一堆文件夾中讀取文件,其中每個文件夾都是頂級類別。
- 處理每個文件中的數據,從
YAML
前端事件和降格格式的文本中讀取數據。 - 這些排序按日期,然後寫一堆
.json
文件,像這樣:cache/posts.json
cache/[category]/[category].json
cache/[category]/[post-id].json
,cache/[category]/[post-id].json
,...等。
我有這個厄運的回調三角形工作。有人告訴我,我應該用承諾來做到這一點,但是,盡我所能,我不能讓我的代碼工作。所以對我有:
folders = ['notes','gallery','diary'];
function getFilesInFolder(folder) {
//returns a new Promise that contains an array of markdown files
}
function getFileContents(folder,file) {
//returns a new Promise that contains the data from the file
}
function processPostData(data,folder,file) {
//returns a new Promise that contains a json object that I want to
//write out to a file
}
function processAllPosts() {
Promise.all(folders.map(getFilesInFolder))
.then((files,folder) => {
console.log(files);
})
.catch((err) => {
console.log('yuk, an error:',err);
})
}
我可以不在身邊讓我的頭是如何從現在呼籲getFilesInFolder
爲文件返回數組的新Promise.all
,並通過這getFileContents
。
我也在做這個與數組的map
函數,我將如何通過當前文件夾,如:files.map(getFileContents(file,folder))
?
任何幫助,將不勝感激。謝謝。
此外:我現在有此代碼工作。對於任何可能會發現它有用的人,它都是here
感謝您的幫助!現在開始有意義。我不明白的另一部分是如何將多個變量傳遞給'.then' - 例如'getFilesInFolder'解析'files'數組和'folder'變量。我如何將這兩個通過'getFileContents'? –
爲了清楚起見,我現在使用的是你的代碼@ tate-thurston的混淆版本,它可能比一盒青蛙更惡劣,[見此處](https://gist.github.com/roobottom/793e607032b62e6ff808) –
沒問題!你有幾個選擇來完成你想要的。您無法將多個值傳遞給'then',因爲javascript中的函數只能返回單個值。你可以返回一個數組。這將需要您調整功能簽名。下一個選項是分配給將保持在範圍內的外部變量。這個變量可以在你調用你的後續函數時使用。最簡潔的方法可能是將承諾鏈分解成幾部分。如果你想要走這條路,我可以告訴你該怎麼做。 –