2016-10-19 24 views
0

Ich versuche, SQL-Abfragen basierend auf den Callback-Ergebnissen in Bedingungen durchzuführen, aber ich kann den Code nicht schreiben. Kann jemand bitte einige Informationen zur Verfügung stellen, wie man das mit async/callback-Methoden macht?Wie schreibe ich diesen Code in async/Callbacks in nodejs?

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

Wie kann ich die Rückrufe für diese schreiben?

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

Nach dem Ergebnis der Rückkehr Ich will Rückrufe zu handhaben und führen Sie diese Abfrage:

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) 
     } 
    }) 
} 
+3

Stack-Überlauf ist für die Beantwortung von Fragen, nicht die Beratung. Bitte nehmen Sie sich etwas Zeit, um Ihre Antwort zu überarbeiten und etwas Spezifisches zu fragen. Bitte korrigieren Sie den Einzug des Codes, es ist sehr schwer zu lesen. – Soviut

Antwort

0

Ihre Frage zu vage ist genau zu beantworten. Ich gehe davon aus, dass Sie zwei Methoden aufrufen müssen und die letztere aufgerufen werden soll, nachdem die erste Methode abgeschlossen ist und Sie die Ergebnisse der ersten Methode in zweiten Methoden benötigen.

nun zur Lösung

Bitte beachten Sie, dass die Callback und versprechen sehr unterschiedliche Ansätze. Es ist sehr weise, bei nur einem zu bleiben und nicht Callbacks und Versprechungen zu mischen. Für Ihre Anforderung, empfehle ich Versprechen sehr callback hell.

Mit Rückrufe zu vermeiden, sieht die Lösung so etwas wie

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