Node.JS 带有 Q promise 的猫鼬请求 return 空 {}
Node.JS mongoose request with Q promise return empty {}
使用猫鼬和 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 promise 相同的请求 return 正确的数据,但奇怪的顺序已完成:
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; v1.4.1
错在哪里?有什么方法可以在函数中调用mongoose?
如果你使用mongoose v4.8.3就不需要q了,直接使用mongoose promise
User.find({})
.then((user) => {
console.log(users);
})
.catch((err) => {
console.error(err);
});
你好像没有掌握异步执行的概念。 "Asynchronous" 表示无法立即获得结果。您需要 return 来自 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");
});
使用猫鼬和 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 promise 相同的请求 return 正确的数据,但奇怪的顺序已完成:
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; v1.4.1
错在哪里?有什么方法可以在函数中调用mongoose?
如果你使用mongoose v4.8.3就不需要q了,直接使用mongoose promise
User.find({})
.then((user) => {
console.log(users);
})
.catch((err) => {
console.error(err);
});
你好像没有掌握异步执行的概念。 "Asynchronous" 表示无法立即获得结果。您需要 return 来自 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");
});