【问题标题】:Node.JS mongoose request with Q promise return empty {}带有 Q 承诺的 Node.JS 猫鼬请求返回空 {}
【发布时间】:2017-07-10 08:33:37
【问题描述】:

使用 mongoose 和 Q 表示承诺。但结果为空{}

var Q = require("q");

var deferred = Q.defer();

User.find({}, function (err, users) {
    if (err) {
        deferred.reject(next(err));
    } else {
        deferred.resolve(users);
    }
});

return deferred.promise;

与 mongoose 承诺的相同请求返回正确的数据,但完成了奇怪的订单:

console.log("Label 1");
console.log("Label 2 Users = " + getUsers());
console.log("Label 3");

...

getUsers = function(next) {
    User.find({}).exec().
        .then(function (err, users) {(
            if (users) {
                console.log("Label 4 Users = " + JSON.stringify(users));
                return user;
            }
        )}
        .catch(err) {
            return next(err);
        });
}

结果:

标签 1 -> 标签 2 -> 用户 = 未定义 -> 标签 3 -> 标签 4 用户 = {...}

Node.Js v7.5;猫鼬 v4.8.3; q v1.4.1

哪里出错了?函数中可以用什么方式调用mongoose?

【问题讨论】:

  • 您的回电在哪里?我所看到的只是下一个(错误)。另外,你为什么不首先使用猫鼬构建承诺?

标签: node.js mongoose promise q


【解决方案1】:

如果你使用 mongoose v4.8.3 就不需要 q 了,直接使用 mongoose promise

User.find({})
    .then((user) => {
        console.log(users);
    })
    .catch((err) => {
        console.error(err);
    });

【讨论】:

    【解决方案2】:

    您似乎没有掌握异步执行的概念。 “异步”意味着结果不能立即获得。您需要从您的 getUsers 函数返回承诺(并修正您的错字):

    getUsers = function(next) {
        // v---- here
        return User.find({}).exec().
            .then(function (err, users) {(
                if (users) {
                    console.log("Label 4 Users = " + JSON.stringify(users));
                    return users;
                }
            )}
            .catch(err) {
                return next(err);
            });
    }
    

    然后等待:

    getUsers().then(function (users) {
        console.log("Label 1");
        console.log("Label 2 Users = " + users);
        console.log("Label 3");
    });
    

    【讨论】:

      猜你喜欢
      • 2015-05-12
      • 2012-12-14
      • 2017-05-15
      • 2018-02-15
      • 2019-02-13
      • 1970-01-01
      • 2018-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多