异步验证永远不会在环回中返回

时间:2015-07-16 00:18:50

标签: loopbackjs strongloop

我在我的一个模型中进行了async验证,我在其中查询相关对象以验证它的存在。问题是请求在此验证时超时,服务器永远不会响应。

module.exports = function(Ip) {
      // Required fields
      Ip.validatesPresenceOf('server_id');

      ...

      Ip.validateAsync('server_id', isExistingServer, {
            message: 'invalid server'
      });

      function isExistingServer(err, done) {
            var ServerModel = Ip.app.models.Server;
            var self = this;
            process.nextTick(function() {
                  ServerModel.findById(self.server_id, function(e, server) {
                        console.log(_.isNull(server));// this actually prints false
                        return _.isNull(server) ? err() : done();
                  });
            });
      }
};

2 个答案:

答案 0 :(得分:3)

因为您需要执行done();然后err();

答案 1 :(得分:1)

根据documentation,您应在done()之后致电err。这是文档中的示例:

User.validateAsync('name', customValidator, {message: 'Bad name'});

function customValidator(err, done) {
    process.nextTick(function () {
        if (this.name === 'bad') err();
        done();
    });
});

请注意,由于在致电err()之前没有返回,因此也会调用done