如何在nodejs中的async / callbacks中编写此代码?

时间:2016-10-19 05:33:27

标签: javascript node.js asynchronous

我正在尝试基于回调结果执行SQL查询,如果条件但我无法编写代码。那么有人可以提供一些有关如何使用异步/回调方法执行此操作的信息吗?

app.get('/resell-property', function(req, res) {
    var data = {}
    data.unit_price_id = 1;
    function callback(error, result) {
        if (result.count == 0) {
            return hp_property_sell_request.create(data)
        } else if (result.count > 0) {
            return hp_unit_price.findAll({
                where: {
                    unit_price_id: data.unit_price_id,
                    hp_property_id: data.property_id,
                    hp_unit_details_id: data.unit_details_id
                }
            })
        }
    }


    hp_property_sell_request.findAndCountAll({
        where: {
            unit_price_id: data.unit_price_id
        }
    }).then(function (result) {
        if (result) {
            callback(null, result);
        }
    });    
});

如何为此编写回调?

hp_property_sell_request.create(data) ,hp_unit_price.findAll({
    where: {
        unit_price_id: data.unit_price_id,
        hp_property_id: data.property_id,
        hp_unit_details_id: data.unit_details_id
    }
})

返回结果后,我想处理回调并执行此查询:

if (result.request_id) {
    return hp_unit_price.findAll({
        where: {
            unit_price_id:result.unit_price_id,
            hp_property_id:result.property_id,
            hp_unit_details_id:result.unit_details_id
        }
    }).then(function(result) {
        if (result.is_resale_unit==0 && result.sold_out==0) {
            return Sequelize.query('UPDATE hp_unit_price SET resale_unit_status=1 WHERE hp_unit_details_id='+result.unit_details_id+' and  hp_property_id='+result.property_id)
        }
    })
}

1 个答案:

答案 0 :(得分:0)

你的问题太模糊了,无法准确回答。我假设你需要调用两个方法,后者应该在第一个方法完成后调用,你需要第二个方法中第一个方法的结果。

现在,到解决方案

请注意,回调和承诺是非常不同的方法。坚持只有一个而不是混合回调和承诺是非常明智的。 根据您的要求,我强烈建议您避免承诺 callback hell.

使用回调,解决方案看起来像

app.get('/resell-property', function(req, res) {
method1(req.body.id,function(err,result){
    return method2(result);
})
function method1(input1,callback(err,result)){
    try{
        var result=st.execute("query");
        return callback(null,result)
    }catch(error){
        return callback(error,null);
    }
}
function method2(input2){
    return input2;
}
})