我正在撰寫 React 應用程式。單擊一個按鈕后,我希望下載檔案。在此之前,我必須修改陣列以使下載的報告具有正確的格式。
我遇到的問題是我不知道如何強制getReports()等待setInOrder()處理資料。因此代碼不會進入回圈。
export const setInOrder = async (objects) => {
var sortedObjectsAll = new Object();
for (let i = 0; i < goals.length; i) {
if (sortedGoalsAll.hasOwnProperty(goals[i].addedBy)) {
sortedGoalsAll[goals[i].addedBy].push(goals[i]);
} else {
sortedGoalsAll[goals[i].addedBy] = new Array();
}
}
return sortedObjectsAll
}
export const getReports = async (objects) => {
const sortedObjectsAll = await setInOrder(objects) // This is correct but not available instantly
console.log(sortedObjectsAll) // this is correctly printed
const reports = new Array();
for (let j = 0; j < sortedObjectsAll.length; j) {
console.log("Never enters here")
reports.push(createReport(sortedObjectsAll[j]))
}
return reports
}
我正在嘗試以某種方式使用 await 或 async ,但無法解決它。我看到了一些建議,但我不知道如何將結果變數真正回傳到實際下載報告的代碼中。
uj5u.com熱心網友回復:
首先,您不需要撰寫類似的 async-await 內容,因為它不是異步操作(如果您撰寫了一個并且其中沒有任何 await,它將什么也不等待)。
其次,您想遍歷一個物件,而不是遍歷一個陣列,這就是問題所在。替換為以下內容(還有其他解決方案):
for (const key in sortedObjectsAll) {
...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/512438.html
標籤:节点.js反应异步
上一篇:Express:在等待之后,在catch內未正確呼叫next
下一篇:在我對資料庫PostgrSQL進行查詢后,無法res.send()(錯誤:“無法在將標頭發送到客戶端后設定標頭”)
