【问题标题】:Sailsjs find() callback actionSailsjs find() 回调动作
【发布时间】:2014-10-19 11:56:00
【问题描述】:

我的回调有问题,我不知道如何找回它。

index: function(req, res,next) {
    User.find().exec(function(err,users) {
        if(err) {
         //do something
        }
        res.locals.users = users
        return true;
    });

   Country.find().exec(function(err,countrys) {
    //save country
   }

  console.log(res.locals.users)
  res.view({
     users: res.locals.users,
     country: countrys
     user:res.locals.user
  });
}

如何访问这两个对象?

谢谢

【问题讨论】:

    标签: node.js sails.js


    【解决方案1】:

    您的 DB 调用正在运行 async,这意味着视图在数据传递给它们之前已呈现。所以你必须以同步的方式制作它们。这可以通过回调来实现,或者您可以链接您的函数而不是回调,就像这样,

    index: function(req, res,next) {
       User.find().exec(function(err,users) {
        if(err) {
         //do something
        }
        else{
          res.locals.users = users
          Country.find().exec(function(err,countrys) {
           if(err) {
               //do something
           }
           else{
               console.log(res.locals.users)
               res.view({
                 users: res.locals.users,
                 country: countrys
                 user:res.locals.user
               });
           }
          }
        }
      });
    }
    

    其他方式是使用回调。

    【讨论】:

    • 谢谢,但是如果我调用了超过 2 个 dbs,如果 else if else if else 就会得到,这对我来说不干净吗?不能退货吗?
    • 但如果我想要超过 2 个 db 调用 User.find() ... { else Country.find().. { else Home.find()... { else Pet.find( ) }}}} 这不漂亮。这是唯一的方法还是我可以映射一些东西或制作额外的功能来获取数据?
    • 进一步嵌套它,因为我已经将 Country 嵌套在 User... 下... 为什么要调用同一个数据库 2 次?
    【解决方案2】:

    如果您在不断添加更多查询时试图使其美观和有条理,您可以使用sails 附带的异步库

    以这个答案为例

    Chaining waterline calls with Promises

    【讨论】:

      猜你喜欢
      • 2019-07-18
      • 1970-01-01
      • 2015-03-01
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-04
      相关资源
      最近更新 更多