2015-12-14 4 views
8

Ho una funzione,sequelize.js - trovare da id e ritorno risultato

var findUserDevice = function(userDeviceId){ 

    var device = db.DeviceUser.find({ 
     where: { 
      id: userDeviceId 
     } 
    }).then(function(device) { 
     if (!device) { 
      return 'not find'; 
     } 
     return device.dataValues; 
    }); 
}; 

ma questa funzione non restituisce nulla ...

var UserDevice = findUserDevice(req.body.deviceUserId); 
console.log(UserDevice);// undefined 

risposta

4

L'operazione che si sta tentando di fare è async, il che significa che è necessario utilizzare un callback. Dal momento che sequelize è costruito sulla cima di promesse, si dovrebbe effettivamente scrivere il codice come questo:

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

E poi utilizzarlo come:

findUserDevice(req.body.deviceUserId).then(function(UserDevice) { 
    console.log(UserDevice); 
}); 
2

Se state ottenendo indefinito invece di ' non trovare 'sulla console, significa che la funzione sta restituendo un valore. Il problema potrebbe essere dataValues ​​in realtà non definito. È necessario verificare il contenuto di device.

Suggerimento: Prova di tornare appena device o device.id

PS. Se si desidera eseguire la ricerca in base all'id, è necessario utilizzare la funzione findById() del modello.

var device = db.DeviceUser.findById(userDeviceId).then(function(device) { 
    if (!device) { 
    return 'not find'; 
    } 
    return device.dataValues; 
});