簡體   English   中英

使用Db / Map JS了解return語句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM