如何确保所有承诺都得到妥善解决?即使在执行该函数之后,仍然会打印一些语句。我觉得 getAllRecords 没有正确履行承诺。我哪里错了?
const getAllRecords = async (offset = 0) => {
return fetchRecord(offset, 10).then((resp) => {
console.log("Called fetchRecord")
if (resp.status === 'success') {
let responseData = resp.data
if (responseData.length === 0 {
return ({ status: 'success' })
}
return proccessData(responseData).then((updateResp) => {
if (updateResp.status === 'success') {
offset += 10
return getAllRecords(offset)
} else {
return ({ status: 'error' })
}
}).catch(err => {
return ({ status: 'error' })
})
} else {
return ({ status: 'error' })
}
}).catch(err => {
return ({ status: 'error' })
})
}
const mainFunc = async () => {
console.log('Inside mainFunc')
return new Promise((resolve, reject) => {
return firestore.getAllCities()
.then(async (cities) => {
return getAllRecords().then(getAllRecordsResponse => {
console.log("Called getAllRecords") //
if (getAllRecordsResponse.status === 'success') {
return getAllRecordsResponse
} else {
return reject({ status: 'error' })
}
}).then((getAllRecordsResponse) => {
let updateArray = []
console.log("Updating firestore db")
for (const city of cities) {
updateArray.push(firebaseDao.updatecityDoc(city))
}
return Promise.allSettled(updateArray).then((responseArr) => {
let errorArr = []
responseArr.map((item) =>
item.status === 'rejected' ? errorArr.push(item.reason) : null
)
if (!errorArr.length > 0) {
console.log("done processing") //
return resolve({ status: 'success' })
} else {
return resolve({ status: 'error' })
}
})
}).catch((err) => {
return resolve({ status: 'error' })
})
}).catch((err) => {
return resolve({ status: 'error' })
})
})
}
我正在尝试从 fetchRecord 中的其他位置获取记录并在 processData 中处理提取的数据。 getAllRecords 是一个递归,因为我们无法一次获取所有数据,只能提取 10 条记录,所以我正在提取记录,直到得到空响应。
我不确定哪里的承诺没有得到妥善处理。我在这里错过了什么吗?
有没有办法只使用 Promise 而不是 async/await?