Javascript “你会怎么做?”;这";是否在嵌套异步模块函数中正常运行?

Javascript “你会怎么做?”;这";是否在嵌套异步模块函数中正常运行?,javascript,node.js,asynchronous,sails.js,Javascript,Node.js,Asynchronous,Sails.js,我使用的是Sails.js框架及其出色的模型特性,我还使用了它作为依赖项的async版本 所以,为了解释一个实际场景:获取所有关于艺术家演唱的歌曲的评论。我应该先查询歌曲,然后再查询评论 这就是我使用async模块的原因,特别是它的瀑布式函数。但由于所有这些代码都放在一个模型文件中,this指的是模型本身,我有一个很大的疑问: 即使存在于异步函数中,也会始终引用模型吗? 这是我正在做的一个代码示例: module.exports = { connection: 'seasonDB', a

我使用的是Sails.js框架及其出色的模型特性,我还使用了它作为依赖项的
async
版本

所以,为了解释一个实际场景:获取所有关于艺术家演唱的歌曲的评论。我应该先查询歌曲,然后再查询评论

这就是我使用
async
模块的原因,特别是它的
瀑布式
函数。但由于所有这些代码都放在一个模型文件中,
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,这会按预期工作吗?对于其他嵌套函数,我应该注意一些事情吗

为什么不在这些查询中使用承诺,这会使处理变得更加容易。我不会使用异步,使用承诺应该可以完成这项工作

Sails中的底层ORM模块是Waterline。您可以参考以下示例或显示以下示例的GitHub页面

User.findOne()
.where({ id: 2 })
.then(function(user){
    var comments = Comment.find({userId: user.id}).then(function(comments){
        return comments;
    });
   return [user.id, user.friendsList, comments];
}).spread(function(userId, friendsList, comments){
// Promises are awesome!
}).catch(function(err){
// An error occurred
})

Waterline docs也有助于参考:

您只需执行代码即可查看
是否具有正确的值。spread的具体用途是什么?spread在返回承诺数组时使用。如果您查看.spread之前的返回,代码将返回一个值/承诺数组。那么“this”呢,如果有必要,使用它是否安全?发现如下:,这看起来是一个非常好的读物,我正在阅读。您只需在User.findOne链之外声明一个变量,并在链内部使用它(如果您希望这样做的话)。否则,你想用“这个”做什么?