Vov*_*zov 15 node.js sequelize.js
我有一个功能,
var findUserDevice = function(userDeviceId){
var device = db.DeviceUser.find({
where: {
id: userDeviceId
}
}).then(function(device) {
if (!device) {
return 'not find';
}
return device.dataValues;
});
};
Run Code Online (Sandbox Code Playgroud)
但是这个功能不会返回任何东西......
var UserDevice = findUserDevice(req.body.deviceUserId);
console.log(UserDevice);// undefined
Run Code Online (Sandbox Code Playgroud)
dri*_*hev 13
您尝试执行的操作是async,这意味着您需要使用回调.由于sequelize构建在Promises之上,您实际上应该像这样编写代码:
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;
});
};
Run Code Online (Sandbox Code Playgroud)
后来使用它像:
findUserDevice(req.body.deviceUserId).then( function(UserDevice) {
console.log(UserDevice);
});
Run Code Online (Sandbox Code Playgroud)
这是2020年,async与await正在变得越来越受欢迎。您可以将代码更改为:
const findUserDevice = async function (userDeviceId) {
const device = await db.DeviceUser.findOne({
where: {
id: userDeviceId
}
});
if (device === null) {
return 'device not found';
}
return device.dataValues;
};
(async () => {
// ...
const UserDevice = await findUserDevice(req.body.deviceUserId);
console.log(UserDevice);
// ...
})()
Run Code Online (Sandbox Code Playgroud)
恕我直言,上面的代码更具可读性。
如果您在控制台上未定义而不是"未找到",则表示您的函数正在返回一个值.问题可能是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;
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21534 次 |
| 最近记录: |