2017-01-10 2 views
0

Ich versuche, einen Ajax-Nachruf an einen Knotenserver zu senden und den Benutzer dann umzuleiten, sobald der Anruf beendet ist. Hier ist meine Jquery-Funktion für die Herstellung der Post Ajax-AufrufDer Ajax-Aufruf wird abgeschlossen, bevor alle Knotenrückrufe ausgeführt werden.

$.ajax({ 
    url: '/myUrl', 
    type: 'POST', 
    data: { myParam: myParam,fileName: finalName}, 
    success: function(data, status){ 
    alert('Ajax call completed!'); 
    customFunction(status); 

    }, 
    error: function(xOptions, textStatus){ 
    alert('Error occured!: '+textStatus); 
    } 
}); 

nun auf der Serverseite, ich bin Umgang mit dieser Anfrage als:

var modCust = require('./custom-module') 

app.post('/myUrl',function(req,res){ 
    var myParam = req.body.myParam; 
    var fileName = req.body.fileName; 

    var cli = modCust.parseExcel(fileName,myParam); 
    res.send(cli); 
}); 

und diese individuell Modul wird mit verschachtelten Rückrufe ausführen mehrere db Funktionen wie:

//#custom-module.js 

executeQuery = function(strSQL, operationType, tableName, cb,myParam) { 
    var request = new sql.Request(connection); 
    request.query(strSQL,function(err, recordset) { 
     if(err){ 
      console.error('ERROR in '+operationType+' ON '+tableName+': '+err); 
     } 
     console.info(operationType+' ON '+tableName+' successful!'); 
     if(cb){ 
      cb(myParam); 
     } 

     return recordset; 
    }); 
}; 

parseFile: function(filePath, myParam){ 
    var strSQL = "<sample query>"; 
    executeQuery(strSQL,'<QueryType>','<table_name>',processDB1,myParam); 
}, 

processDB1: function(myParam){ 
    var strSQL = "<sample query>"; 
    executeQuery(strSQL,'<QueryType>','<table_name>',processDB2,myParam); 
}, 

processDB2: function(myParam){ 
    var strSQL = "<sample query>"; 
    executeQuery(strSQL,'<QueryType>','<table_name>',processDB3,myParam); 
}, 

processDB3: function(myParam){ 
    var strSQL = "<sample query>"; 
    executeQuery(strSQL,'<QueryType>','<table_name>'); 
}, 

Aber die Frage ist, wird der Alarm Aufruf ausgeführt, noch bevor alle Rückrufe abgeschlossen sind bis processDB3(). Kann ich die Warnung erst nach dem letzten Rückruf von einem Knoten anzeigen lassen?

Dank

Antwort

0

Sie müssen sich in Versprechungen in Javascript suchen. Die Funktion ParseExcel sollte Versprechen zurückgeben, so dass Sie wie folgt tun:

modCust.parseExcel(fileName,myParam).then(function(resultFromParseExcelFunction) { 
    res.send(resultFromParseExcelFunction) 
}) 

Check out node package q Versprechen in einfache Weise zu erreichen.

Verwandte Themen