javascript - 不要带着 promise 来工作

标签 javascript

我尝试这段代码:

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

我需要验证数据=>汽车名称,如果汽车不存在,则创建新汽车并执行下一个逻辑,例如停放汽车。如果找到汽车,则执行停放汽车功能。

最佳答案

避免 Promise constructor antipatterncarListParsing中,并从validateCar返回您的结果 promise !

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
}

关于javascript - 不要带着 promise 来工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44298342/

相关文章:

javascript - 自上而下的汽车游戏中的漂移痕迹

javascript - 将包含文件传递到 Handlebars 布局中

javascript - ReactJS 组件渲染问题

javascript 数组列表

javascript - Div 文本不会更改为 API 属性

javascript - jquery 帮助返回顶部

javascript - 从 Chrome 开发工具调用内部函数

javascript - 用于捕获图像 src 属性的正则表达式

javascript - 将函数作为这样的函数的参数在语法上可以接受吗?

javascript - 如何通过 JavaScript 或 Node.js 强制将 PDF 从文件夹下载到浏览器/用户?