【发布时间】:2015-06-10 23:08:28
【问题描述】:
我正在使用 Sails.js 框架及其出色的 Model 功能,并且我正在使用它用作其依赖项的 async 版本。
所以,为了解释一个实际场景:获取所有 cmet 的艺术家演唱的歌曲。我应该先查询歌曲,然后查询 cmets。
这就是我使用async 模块的原因,尤其是它的waterfall 函数。但由于所有这些代码都放在一个模型文件中,其中this 指的是模型本身,我有一个很大的疑问:
即使存在于异步函数中,它是否总是引用模型?
这是我正在做的代码示例:
module.exports = {
connection: 'seasonDB',
attributes: {
reachesMaxFavoriteTeam: function (team) {
var results [];
async.waterfall([
// Get favorite team
function (cb) {
var userTeam = this.userTeam;
UserTeam.findOne({_id: userTeam}, function (err, foundUserTeam) {
if (err)
cb(err,null);
var user = foundUserTeam.user;
User.find({_id: user}, {_id:false, fanOf: true}, function (err, fanOf) {
if (err)
cb(err,null);
cb(null,fanOf.name);
});
});
},
// Check if it reaches a max favorite team error
function (favoriteTeam,cb) {
// If player to be added is from favorite team, it counts.
favoriteCount = team === favoriteTeam ? 1: 0;
// Check if any of added players are from favorite team too.
_.forEach(this.players, function (player) {
var playerTeam = player.team.name;
if (playerTeam === favoriteTeam)
favoriteCount++;
});
return favoriteCount > process.env.CONDITION;
}]);
}
};
因此,例如,在瀑布系列的第一个函数中,我得到:var userTeam = this.userTeam;,这会按预期工作吗?如果有其他嵌套函数,我应该处理一些事情吗?
【问题讨论】:
-
您可以简单地执行代码来查看
this的值是否正确。
标签: javascript node.js asynchronous sails.js