由于异步函数而过早地从函数返回的值

时间:2017-07-29 19:22:30

标签: javascript asynchronous callback

所以我想在计算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;
}

1 个答案:

答案 0 :(得分: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
});