CNode

同步获取nodejs从mysql数据库读取的数据,用yield报错

问答
GGdreamlend发布于11 年前最后回复11 年前10 回复5935 浏览0 收藏

读取数据库内容函数,所在文件mysqloperate.js

exports.selectpro = function*(cb){ var sql = "SELECT DISTINCT projectname FROM invoketable"; var projectname; client.query(sql,function(err, rows, fields) { if(err) { cb(err, null); } else { projectname = rows[0].projectname; console.log('select projectname from db'); console.log(rows[0].projectname); cb(null, rows[0].projectname); } }); };

路由中调用上面函数,取出得到的数据返回给页面

route.get('/readproject',function *(){ var dataprodect; var a; yield mysqlinsertp.selectpro(function(err, res){ if (err) throw err; dataprodect = res; console.log(res); }); console.log("dataprodect"); console.log(dataprodect); this.body={status:200,ok:true,data:dataprodect}; console.log(this.body); });

前端调用请求

$.ajax({ url: "/readproject", type: "GET", dataType: 'json', data: null, success:function(res){ if(res.status == 200){ if(res.data == null){ console.log("no data"); } else{ var last = JSON.stringify(res); console.log(last); } } }, error:function(err){ console.log(err); } });

得到输出: dataprodect //并没有按顺序输出 undefined { status: 200, ok: true, data: undefined } //因为异步dataprodect并没有得到返回的值,求这里得到值得做法 select projectname from db projectname1 projectname1

求指导

查看回复

回复 (9)

Z
ZhenfeiWu#1·11 年前

可能是你的不对应,或者与法出错了

G
Gdreamlend#2·11 年前
引用 ZhenfeiWu可能是你的不对应,或者与法出错了

@ZhenfeiWu 能具体的说一下吗,多谢

G
Gdreamlend#3·11 年前

@lonso exports.selectpro = function(cb)这个函数改为generator之后 yield好像并没有起作用 返回为 { status: 200, ok: true, data: undefined } select projectname from db projectname1 projectname1

Z
ZhenfeiWu#4·11 年前
引用 Gdreamlend@ZhenfeiWu 能具体的说一下吗,多谢

@Gdreamlend 你把 “SELECT DISTINCT projectname FROM invoketable” 改为 “SELECT * projectname FROM invoketable”试一试

T
TimothyJin#5·11 年前

untitled1.png 楼主,你不看错误信息??

G
Gdreamlend#6·11 年前
引用 ZhenfeiWu@Gdreamlend 你把 “SELECT DISTINCT projectname FROM invoketable” 改为 “SELECT projectname FROM invoke...

@ZhenfeiWu 按您说的做了,还是不行,在exports.selectpro = function(cb)函数中console数据的话是得到了的。

G
Gdreamlend#7·11 年前
引用 TimothyJin楼主,你不看错误信息??

@TimothyJin 看了的,新手刚刚学nodejs,还望多多指教

T
TimothyJin#8·11 年前

@Gdreamlend yield 只能执行promise function 或者 function*() generator,建议楼主看下其他人的demo先

参与回复
登录后即可参与回复。登录