javascript - how koa.js yield next works? -


i have following code in koa.js

var koa = require('koa'); var app = koa(); var mysql = require('mysql');  app.use(function *(next) {   console.log('a');   yield next;   console.log('e'); });  app.use(function *(next) {   console.log('b');   yield next;   console.log('d'); });  app.use(function *(next) { var rowcount;   console.log('c');   var connection = mysql.createconnection({     host     : 'localhost',     user     : 'root',     password : 'pass',     database : 'db1'   });    connection.connect();    connection.query('select * itemcategory', function(err, rows, fields) {     if (err) throw err;      console.log('the solution is: ', rows);     rowcount = rows;     console.log('the rowcount is: ', rowcount);   });     this.body = "we good!.." + rowcount ;   connection.end();  });  app.listen(3000); 

the rowcount variable prints undefined in browser. inside connection.query prints rows. output in console

ps j:\proj\pg> node --harmony  .\app.js b c d e solution is:  [ { categoryno: 0, categoryname: 'pesticides', categorystatus: 0 },   { categoryno: 1, categoryname: 'seeds ', categorystatus: 0 },   { categoryno: 2, categoryname: 'fertilizers', categorystatus: 0 },   { categoryno: 3, categoryname: 'others', categorystatus: 0 } ] rowcount is:  [ { categoryno: 0, categoryname: 'pesticides', categorystatus: 0 },   { categoryno: 1, categoryname: 'seeds ', categorystatus: 0 },   { categoryno: 2, categoryname: 'fertilizers', categorystatus: 0 },   { categoryno: 3, categoryname: 'others', categorystatus: 0 } ] 

as per example in koa should print rows , d , e, db rows printed after d , e.

if db code removed prints in correct order. running harmony flag.

please tell me problem?

your running query asynchronously callback, isn't way want in koa.

you want either use library supports promises or thunks or can wrap library using returns promise or thunk.

then yield query, pauses execution of function until result return, function continues paused result of query available.

for example should consider following library:

i haven't used can't vouch it, looks reasonable @ glance.

https://github.com/sidorares/mysql-co

this library wrapper on mysql library yield-able.

so code this:

var koa = require('koa'); var app = koa(); var mysql = require('mysql-co');  app.use(function *(next) {   console.log('a');   yield next;   console.log('e'); });  app.use(function *(next) {   console.log('b');   yield next;   console.log('d'); });  app.use(function *(next) { var rowcount;   console.log('c');   try{     var connection = mysql.createconnection({       host     : 'localhost',       user     : 'root',       password : 'pass',       database : 'db1'     });      var result = yield connection.query('select * itemcategory');     console.log(result);      this.body = "we good!.." + result.rows ;     connection.end();   }   catch(err){     // handle errors here   } });  app.listen(3000); 

Comments

Popular posts from this blog

javascript - Bootstrap Popover: iOS Safari strange behaviour -

Magento/PHP - Get phones on all members in a customer group -

session - Logging Out Using PHP -