如何在SailsJS / Waterline中使用带有promise的Model.query()

时间:2015-12-07 13:59:31

标签: javascript sails.js

我遇到了Sails.JS的问题。我想在Model.query()函数中使用promises(我使用sails-mysql adapter)。 我使用承诺如下:

var Promise = require('bluebird'); var patientQueryAsync = Promise.promisify(Patient.query);

但它不起作用。返回ReferenceError: Patient is not defined,是否有人遇到同样的问题?非常感谢你!

4 个答案:

答案 0 :(得分:2)

Waterline支持承诺of the box,因此无需宣传。

Patient.findOne()
.where({ id: 5 })
.then(function(patient){
  //do something
  return patient.lastVisit;
}).catch(function(err){
   // An error occurred
})
然而

查询不会在promis中扭曲,所以它需要被宣传(这对我有用):

var query = Promise.promisify(Patient.query);
query('SELECT name FROM patient').then(function(results) {
  //do something
});

答案 1 :(得分:0)

认为this适合您。 “Waterline查询实现了与Bluebird promise库的部分集成”

Patient.find()
.then(function (allTheStuff) {...})
.catch(function (err) {...});

Promises

  

Promises使用Bluebird库,所以你在第一个之后做的任何事情   然后调用(或传播,或捕获),将是一个完整的蓝鸟承诺   宾语。请记住,您必须以某种方式结束查询(通过调用then或   其中一个函数)以完成数据库请求。

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
})

答案 2 :(得分:0)

.query()不支持sails.js中的promise。我用https://github.com/balderdashy/sails/issues/3418中的方法处理问题 效果很好。

答案 3 :(得分:0)

  

因为sails.js中的模型是全局的。您可以在下方看到此设置    config / global.js

确保您已经定义了您的患者模型   API /模型。即使它在文件夹内,你仍然可以调用模型。   不要忘记在模型对象中指定至少一个键   就像我在下面做的那样。

     

/ ** *订单型号。 * * @description ::此型号可以使用   朝向订单功能中的所有功能。 * /

     

module.exports = {tableName:'order_seller'};   

  之后,您的上述代码应该有效。与Postman一起测试它是否有用。

 var Promise = require('bluebird');<br>
 var query  = "SELECT *FROM SOMETHING";
 var runQuery = Promise.promisify(Patient.query);
 runQuery(query).then(function(){}).catch(function(){});