[英]Understanding return statement with Db/Map JS
Promise.all(membersArray.map((member) => {
return db
.doneTodo
.find({'victor._id': member._id})
.then((userVictories) => {
return {
email: member.email,
victories: userVictories.length
};
});
})).then((memberStats) => {
console.log(membersStats);
});
db.doneTodo
是貓鼬模式。 我有個問題:
問:為什么我們需要“ db.doneTodo ...”旁邊的“ return”語句? 為什么第二個“返回”不夠?
我的推理:由於我們將map應用於每個元素,因此我們將應用此函數:
{
return db
.doneTodo
.find({'victor._id': member._id})
.then((userVictories) => {
return {
email: member.email,
victories: userVictories.length
}
});
}
和
.then((userVictories) => {
return {
email: member.email,
victories: userVictories.length
}
評估為
{
email: member.email,
victories: userVictories.length
}
這樣做:
db
.doneTodo
.find({'victor._id': member._id})
.then((userVictories) => {
return {
email: member.email,
victories: userVictories.length
}
});
}
評估為
{
email: member.email,
victories: userVictories.length
}
這樣我們退貨了嗎?
是的,您部分正確。 .then()
返回一個Promise
,如果您從Promise.resolve(<value>)
.then()
內部返回一個值,它將有效地返回Promise.resolve(<value>)
。
因此,實際上,以下代碼確實返回(或者更確切地說,以該對象作為值來解決Promise )該對象。
.then((userVictories) => {
return {
email: member.email,
victories: userVictories.length
}
});
問:為什么我們需要在“
db.doneTodo...
”旁邊添加“return
”語句? 為什么第二個“return
”不夠?
你想將結果返回給Promise.all()
函數調用,將包裹在陣列中的所有解決承諾值,然后從承諾的決心.all()
函數返回。
如果您省略最上面的return
語句,代碼仍將運行,但是如果您鏈接Promise.all(...).then((arrayOfResults) => { ... })
,則arrayOfResults
將包含一個數字undefined
值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.