從下面的代碼中可以看出,我想做的是創建一個格式如下的物件陣列:
[{Region: 非洲, 國家: X, X, X}, {地區: 亞洲, 國家 X, X, X}] 。
"X "是用來代替國家名稱的。我能夠成功地創建這個物件的陣列。
當我完成創建這個物件陣列時,我想做一個res.send 200來發送資料。問題是,在之前的所有配置中,我得到了一個錯誤,因為res.send會嘗試執行多次。現在我試圖用承諾來做,并使用Promise.all。我很確定我的實作是錯誤的,因為現在這段代碼沒有產生任何東西,而是沒有輸出。
這段代碼非常接近它需要的位置......如果有人能告訴我我在這里錯過了什么,那就太好了。這肯定是與承諾有關的問題。
router.get("/FRPListing"/span>, async (req, res) => {
//Array of all regions//有一個國家串列。
//Holder陣列
let regCountryList = new Array()
/New Array()
let countryList = new Array()
countryList. push("歐洲和英國"/span>, "非洲"/span>, "中東和海灣", "歐亞大陸", "亞洲"。"大洋洲", "北美洲", "中美洲加勒比", "南美洲", "全球")
countryList.forEach(async function (value) {
let EuropeUK = await FRPObj. find({Region: value}, 'Region Country') 。 sort({Country: 1}).distinct('Country') .exec()
let EuropeUKRegCountryList = new Object()
EuropeUKRegCountryList.Region = value
EuropeUKRegCountryList.Countries = EuropeUK
regCountryList.push(EuropeUKRegCountryList)
})
Promise.all(regCountryList).then(values => {
res.send({status: 200, results: regCountryList})
});
});
uj5u.com熱心網友回復:
你的問題中似乎缺少了一些資訊。 如果你能發布一個最小的可復制的例子,那就更好了。
我認為你沒有完全理解 Promise.all 的作用,你用它來包裝一個資料陣列,這并沒有什么作用。
相反,您應該構建一個承諾陣列(對您的資料服務的呼叫),并將該傳遞給Promise.all。 Promise.all將呼叫所有傳遞給它的承諾,并等待它們全部解決。
當你在撰寫代碼時,最好能重新命名一些變數,以便更清楚地了解其意圖。
類似這樣的事情應該很接近。一些細節可能并不正確,例如,取決于你的服務呼叫實際回傳什么。
。// You shouldn't need the `async` keyword decorating this function
//如果你使用承諾來處理回呼。 如果你使用的是
// "await "在回呼中,例如,你將需要它。
router.get("/FRPListing", (req, res) => {
const regions = ["歐洲和英國", "非洲", "中東和海灣", "歐亞大陸", "亞洲"。"大洋洲", "北美洲", "中美洲加勒比", "南美洲", "全球"】。]
const fetchCountries = [];
//首先,建立一個承諾陣列(你對資料源的異步呼叫)。
for (const region of regions) {
fetchCountries.push(
FRPObj.find({
Region: region
}, 'Region Country').sort({span class="hljs-title class_">Region: region.
Country。1。
}).distinct('Country').exec() 。
);
}
// Promise.all將回傳一個結果陣列,每個有一個條目。
//承諾,并且它們將按照原始的順序
// promises被推入陣列。 因為順序是 /span>
//保留了,你可以從region.中查詢到區域。
Promise.all(fetchCountries).then(>results => {
const aggregatedResults = [];
for (let i = 0; i < regions.length; i ) {
const region = regions[i];
const countries = results[i];
aggregatedResults.push({
Region: region,
Countries: countries
});
}
res.send({
status: 200,
results: aggregatedResults
});
});
});
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/331062.html
標籤:
上一篇:從MongoDB獲取隨機用戶
