私には機能があります
var findUserDevice = function(userDeviceId){
var device = db.DeviceUser.find({
where: {
id: userDeviceId
}
}).then(function(device) {
if (!device) {
return 'not find';
}
return device.dataValues;
});
};
しかし、この関数は何も返しません...
var UserDevice = findUserDevice(req.body.deviceUserId);
console.log(UserDevice);// undefined
実行しようとしている操作はasync
です。これは、コールバックを使用する必要があることを意味します。 sequelize
はPromiseの上に構築されるため、実際に次のようにコードを記述する必要があります。
var findUserDevice = function(userDeviceId){
// return the promise itself
return db.DeviceUser.find({
where: {
id: userDeviceId
}
}).then(function(device) {
if (!device) {
return 'not find';
}
return device.dataValues;
});
};
後でそれを次のように使用します:
findUserDevice(req.body.deviceUserId).then( function(UserDevice) {
console.log(UserDevice);
});
コンソールで「見つかりません」ではなく未定義になっている場合は、関数が値を返していることを意味します。問題は、dataValuesが実際には定義されていないことです。 device
の内容を確認する必要があります。
ヒント:device
または_device.id
_のみを返すようにしてください
PS。 idに基づいて検索を実行する場合は、モデルのfindById()
関数を使用する必要があります。
_var device = db.DeviceUser.findById(userDeviceId).then(function(device) {
if (!device) {
return 'not find';
}
return device.dataValues;
});
_
2019年、async
&await
はますます人気が高まっています。コードを次のように変更できます
const findUserDevice = async function (userDeviceId) {
const device = await db.DeviceUser.find({
where: {
id: userDeviceId
}
})
if (!device) {
return 'not find'
}
return device.dataValues
}
;(async () => {
// ...
const UserDevice = await findUserDevice(req.body.deviceUserId)
console.log(UserDevice)
// ...
})()
私見、上記のコードはより読みやすいです。
この関数はparams idを受け取りました。このワーカーは私のために:
const { customer } = require('../models');
const get = async function(req, res){
let id = req.params.id;
[err, singleCustomer] = await to(customer.findByPk(id, { raw : true }));
return ReS(res, { message :'Obtener cliente: : ', data : JSON.stringify(singleCustomer) });
}