【问题标题】:Service that returns data from an asynchronous method从异步方法返回数据的服务
【发布时间】:2014-10-20 10:34:07
【问题描述】:

我正在使用 Sails 的 ORM(水线)。我写了一个geturl 服务,它应该返回我的应用程序中几个模型/动作的url。我目前正在我的模板中调用此服务。

(因为我一个人开发这个,如果这个设计模式是错误的,请不要犹豫警告我)

现在 Waterline 的 .find() 方法是异步的(应该如此)。在数据库中插入或获取内容时,我总是使用回调来做事。

现在我看到everywhere 我无法从异步方法返回任何数据。结果我很困惑,因为我想创建这个 [该死的] 服务来集中 URL 管理。

这是我当前的代码:

module.exports = {
    variete: function(id_objet) {
        var string = '/default_url';
        return onvariete(id_objet, function (err, url) {
          if (err) {
              sails.log.error('Error : ', err);
          } else {
              return url;
          }
        });
    }
};


function onvariete(id_objet, next) {
  var url = '/';
  return Variete.findOne({id:id_objet}).exec(function (err, v) {
    sails.log.info('URL Variety : '+ v.nom + ' / ' +id_objet + ' / ' + v.slug);
    if (err) {
      sails.log.error('Error : ' + v.nom + ' / ' + err);
      // Do nothing.
      return next(new Error('Variete error'), undefined);
    } else if (!v) {
      return next(new Error('Variete not found'), undefined);
    } else if (!v.slug) {
      // variete doesn't have a slug field
      // we redirect to /v/:id
      url += 'v/' + v.id;
      return next (null, url);
    } else {
      // Ok variete has got a slug field
      sails.log.info('GOT A SLUG! ' + v.slug);
      url += 'variete/' + v.slug;
      return next (null, url);
    }
  });
}

我创建了一个嵌入我的geturl 服务的static 对象,然后在Jade 模板中:

a(href="#{s.geturl.variete(ann.variete.id)}" title="#{ann.variete.name}") #{ann.variete.name}

我可以得到类似的东西:

<a title="Tomate Coeur de Boeuf" href="undefined">Tomate Coeur de Boeuf</a>

提前谢谢你。

【问题讨论】:

    标签: node.js asynchronous functional-programming sails.js waterline


    【解决方案1】:

    解决办法 vas 写一个.url(bool) 实例方法。见how to write instance methods in Sails / Waterline

    这样我可以直接从我的模板中访问这个方法:a(href="#{ann.variete.url()}" title="#{ann.variete.name}") #{ann.variete.name}

    完成!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-24
      • 2020-04-28
      • 2019-01-22
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      相关资源
      最近更新 更多