我遇到了Sails.JS的问题。我想在Model.query()函数中使用promises(我使用sails-mysql adapter)。 我使用承诺如下:
var Promise = require('bluebird');
var patientQueryAsync = Promise.promisify(Patient.query);
但它不起作用。返回ReferenceError: Patient is not defined
,是否有人遇到同样的问题?非常感谢你!
答案 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使用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(){});