【发布时间】:2015-05-01 15:41:12
【问题描述】:
我正在使用带有 Node js 的 when 库。我创建了一个延迟对象,将解析放在封装的 Mongoose findOne() 函数中,然后在外面返回承诺。但似乎我的承诺总是在检索数据之前返回。
User.prototype.getProfile = function(criteria) {
var deferred = when.defer();
var options = {
criteria: criteria,
select: 'name id email'
};
this.User.load(options, function(err, data) {
if (data) {
this.name = data.name;
this.email = data.email;
this.id = data.id;
} else {
return false;
}
console.log(data);
deferred.resolve();
});
console.log('returning promise');
return deferred.promise;
};
来电者
User.getProfile(req.query).then(
function success(data) {
res.send('Hello ' + User.name);// Hello ''
}
);
在data之前输出'returning promise'
【问题讨论】:
-
这是预期的结果。您对代码有任何问题吗?请注意,您的
return false将意味着承诺永远不会解决/拒绝,这很糟糕。 -
是的,这正是重点。如果
User.load阻止执行并等待查询完成,那么一开始就没有任何意义。 -
这看起来有点像deferred antipattern - 你从来没有
reject,只是让承诺待定。
标签: javascript node.js promise deferred when-js