0

I try this code:

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 to validate data => Car name, if car not exist then create new car and perform next logic, example park car. If car found, then perform function park car.

Sergei R
  • 701
  • 4
  • 10
  • 24
  • 1
    You forgot to return the promise from `validateCar`: `return db.cars....`. You should be seeing an error similar to "Cannot access property 'then' of 'undefined'". – Felix Kling Jun 01 '17 at 04:07
  • I can't receive any errors. Idealy I would like to return only binary result Yes or No. In this case I return same data that I checked to continue work with them. Or return information that car is exist. – Sergei R Jun 01 '17 at 05:13

1 Answers1

2

Avoid the Promise constructor antipattern in carListParsing, and return your result promise from 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
}
Bergi
  • 630,263
  • 148
  • 957
  • 1,375