2017-07-29 2 views
0

Also möchte ich den Wert Json10 nach beiden Query.on berechnet haben. Aber query.on ist asynchron, also komme ich von meiner Funktion zurück, bevor json10 berechnet werden kann. Wie kann ich diese Funktion so strukturieren, dass die Query.ons abgeschlossen sind, bevor ich von der Funktion zurückkomme?Wert wird vorzeitig von Funktion aufgrund von asynchronen Funktionen zurückgegeben

function getJsn(mystr){ 
    var query = doc.query(mystr); 
    var json10; 
    query.on("row", function (row, result) { 
     result.addRow(row); 
    }); 
    query.on("end", function (result) { 
     var json1 = JSON.stringify(result.rows, null, " "); 
     json10= json1; 
     var json = JSON.parse(json1); 
     for(var i = 0; i < json.length; i++) { 
     var obj = json[i]; 
     } 
    }) 
    return json10; 
} 
+0

Ich habe haben, aber nicht in der Lage gewesen, es – Matt

+0

, um herauszufinden, Sie möchten ein Versprechen verwenden, überprüfen Sie https://stackoverflow.com/documentation/javascript/231/promises#t=201707291926141558833 –

Antwort

3

Sie benötigen einen Rückruf zu verwenden, da Sie sind async innerhalb getJsn

function getJsn(mystr, cb){ 
    var query = doc.query(mystr); 
    var json10; 
    query.on("row", function (row, result) { 
     result.addRow(row); 
    }); 
    query.on("end", function (result) { 
     var json1 = JSON.stringify(result.rows, null, " "); 
     json10= json1; 
     var json = JSON.parse(json1); 
     for(var i = 0; i < json.length; i++) { 
     var obj = json[i]; 
     } 
     cb(json10); 
    }) 
} 

und nennen Sie es wie diese

getJsn(someStr, function(ret) { 
    console.log(ret); // this should return json10 
}); 
Verwandte Themen