使用Db / Map JS了解return语句

时间:2016-12-31 07:47:25

标签: javascript node.js

<?php $fines=Yii::$app->db->createCommand('select sum(fines) as fines from lib_chekout '); ?>

是一个Mongoose Schema。我有一个问题:

问:为什么我们需要&#34;返回&#34;旁边的声明&#34; db.doneTodo ...&#34;?为什么不是第二个&#34;返回&#34;足够?

我的推理:由于我们将map应用于每个元素,因此我们正在应用此功能:

<h4 class="pull-left" style="font-size: 20px"> Total fines Collected Till Today : </h4> <p class="text-center" style="font-size: 20px"> <?= $fines ?> </p>

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

评估到

{
                return db
                    .doneTodo
                    .find({'victor._id': member._id})
                    .then((userVictories) => {
                        return {
                            email: member.email,
                            victories: userVictories.length
                        }
                    });
            }

SO DOES:

.then((userVictories) => {
                        return {
                            email: member.email,
                            victories: userVictories.length
                        } 

评估到

{
                                email: member.email,
                                victories: userVictories.length
                            } 

因此我们回来了吗?

1 个答案:

答案 0 :(得分:0)

是的,你是部分正确的。 .then()会返回Promise,如果您从.then()中返回值,则会有效地返回Promise.resolve(<value>)

因此,确实,以下代码确实返回(或者更确切地说,使用该对象解析承诺作为值)对象。

.then((userVictories) => {
    return {
        email: member.email,
        victories: userVictories.length
    }
});
  

问:为什么我们需要&#34; return&#34;旁边的声明&#34; db.doneTodo...&#34;?为什么   不是第二个&#34; return&#34;足够?

您希望将结果返回到Promise.all()函数调用,该调用将所有已解析的promise值包装在一个数组中,然后从.all()函数返回的promise中解析。

如果您要省略顶部return语句,代码仍会运行,但如果您将Promise.all(...).then((arrayOfResults) => { ... })链接起来,arrayOfResults将包含多个undefined值。