2017-07-29 62 views
0

所以我想在计算两个query.on后返回值json10。然而,query.on是异步的,所以我可以在计算json10之前从我的函数返回。我如何构造这个函数,以便在函数返回之前完成query.on的操作?由于异步函数过早返回函数的值

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

我有,但一直没能弄明白 – Matt

+0

你会想使用一个承诺,检查出https://stackoverflow.com/documentation/javascript/231/promises#t=201707291926141558833 –

回答

3

您将需要使用一个回调,因为你是异步里面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); 
    }) 
} 

,并调用它

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