2017-06-01 5 views
0

Ich versuche, diesen Code:Arbeitet Funktion nicht mit Versprechen

function addNewCars(req, res) { 
    let CarsList = req.body; 
    carListParsing(carList) 
     .then(function() { 
     console.log('OK'); 
     res.status(200).send('OK'); 
    }).catch(function (err) { 
     res.status(200).send(err); 
    }); 
} 

function carListParsing (data) { 
    return new Promise(function (resolve, reject) { 

     let newCar = {}; 
     newCar.name = data.car_name; 
     validateCar(newCar).then(function (data) { 
      console.log('validate result1: ', data); //this line doesn't show 
      //if I get validation result, I can use next function createCat() 
      resolve(data); 
     }).catch(function (err) { 
      reject(err); 
     }); 
    }); 
} 

function validateCar(data) { 
    db.cars.findAll({where: {name: data.name}}).then(function (org) { 
     if (org.length < 1) { 
      console.log('validate1: OK'); //work 
      return data; 
     } else { 
      console.log('validate2: already exist'); //work 
      return new Error('The ' + data.name + ' car is already exist.'); 
     } 
    }).catch(function (err) { 
     return err; 
    }); 
} 

I neet Daten überprüfen => Auto Namen, wenn Auto nicht dann neues Auto vorhanden schaffen und nächste Logik, zB Park Auto durchführen. Wenn das Auto gefunden wurde, dann führe das Funktionsparkauto aus.

+1

Sie haben vergessen, das Versprechen von 'validateCar' zurückzugeben:' return db.cars .... '. Es sollte ein Fehler angezeigt werden, der ähnlich ist wie "Kann nicht auf Eigenschaft zugreifen" und dann auf "undefiniert". –

+0

Ich kann keine Fehler erhalten. Ideally möchte ich nur binäres Ergebnis Yes oder No zurückgeben. In diesem Fall gebe ich dieselben Daten zurück, die ich überprüft habe, um mit ihnen weiter zu arbeiten. Oder geben Sie Informationen zurück, dass das Auto existiert. –

Antwort

2

Vermeiden Sie die Promise constructor antipattern in carListParsing und return Ihr Ergebnis Versprechen von validateCar!

function addNewCars(req, res) { 
    // CarsList is a typo 
    carListParsing(req.body) 
    .then(function() { 
     console.log('OK'); 
     res.status(200).send('OK'); 
    }, function (err) { // more appropriate than catch 
     res.status(200).send(err); 
    }); 
} 

function carListParsing (data) { 
    let newCar = { 
     name: data.car_name 
    }; 
    // don't call `new Promise` 
    return validateCar(newCar).then(function (data) { 
     console.log('validate result1: ', data); //this line doesn't show 
     // if I get validation result, I can use next function createCat() 
     return data; // don't resolve 
    }); 
} 

function validateCar(data) { 
    return db.cars.findAll({where: {name: data.name}}).then(function (org) { 
// ^^^^^^ 
     if (org.length < 1) { 
      console.log('validate1: OK'); //work 
      return data; 
     } else { 
      console.log('validate2: already exist'); //work 
      throw new Error('The ' + data.name + ' car is already exist.'); 
//   ^^^^^ probably what you actually wanted 
     } 
    }) // don't ignore errors 
} 
Verwandte Themen