2

我正在使用Sails的ORM(水線)。我寫了一個geturl服務,應該返回我的應用程序中的幾個模型/動作的網址。我目前在我的模板中調用這個服務。從異步方法返回數據的服務

(正如我獨自開發這個,不要猶豫,警告我,如果這種設計模式是錯誤的)

現在它發生時水線的.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); 
    } 
    }); 
} 

我做了一個static對象嵌入我的geturl服務,然後裏面翡翠的模板:

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> 

先謝謝您。

回答