我不确定自己在做什么错。但是我有这个小功能:
tripStatus (id) {
db.Trip.findOne({ attributes:['status'], where: {id: id} }).then(trip => {
// trip will be null if not found else contains information about the trip
if(trip!=null){
console.log('found ', trip.dataValues['status']);
return trip.dataValues['status'];
}
else{
return -1;
}
}).catch(err=>{
return -1;
})
}
现在我这样称呼它:
var status=TripFunctions.tripStatus(1)
//console out puts now in order of display on the console
console.log(status) // gives undefined. FIrst out put
'SELECT status from Trip WHERE id=1'
"Found status 3"
它立即返回值。
答案 0 :(得分:1)
您将在Sequelize创建的Promise中返回值,但不会从函数中返回该承诺。解析promise中的值并返回,以便您可以等待结果。
您还应该使用Instance.getDataValue()
函数而不是直接访问它们,或者如果只需要raw: true
,最好使用status
根本不构造对象-它会返回一个普通的JSON对象。可能也使用了Model.findById()
。
tripStatus (id) {
// return the promise
return db.Trip.findById(id, {
attributes:['status'],
raw: true,
})
.then(trip => {
// trip will be null if not found else contains information about the trip
return Promise.resolve(trip ? trip.status : -1);
})
.catch(err => {
return Promise.resolve(-1);
});
}
使用Promise称呼它
TripFunctions.tripStatus(1).then((status) => {
// the status is available in the promise resolution
if (status !== -1) {
// do something
}
});
使用async/await
编写代码会更加简洁。
async function tripStatus (id) {
const trip = await db.Trip.findById(id, {
attributes:['status'], raw: true});
return trip ? trip.status : -1;
}
然后您可以使用async/await
来调用它。
const status = await TripFunctions.tripStatus(1);
if (status !== -1) {
// do something
}