新手求助 最近使用q这个库来尝试解决nodejs的异步调用的问题,发现写起来和原来的回调方式差别不大,代码很短:
怎么才能写的更优雅一点?像这种到某一步又要用到前几步的结果的时候怎么办?看到百度的例子都是好理想化,每一步所需要的数据都是前一步给的。
这用的是哪个db和orm, getUserById这种返回的是个数组?, 找不到数据自动抛错误?
getUserById
var bbsData, userData; db.getIntelligence(bbsId) .then(function(result) { if(!result) { throw new Error('帖子不存在'); } bbsData = result[0]; return db.getUserById(bbsData.userId) }) .then(function(result) { if(!result) { throw new Error('用户不存在'); } userData = result[0]; // 组装数据 // 返回数据 // ... }) .catch(funtion(err) { res.status(500).send({ recode: cfg.recode.ERROR, data: err, msg: err.message }) })
你没用q吧?? 自豪地采用 CNodeJS ionic
你这些db里的方法封装的时候需要返回一个promise对象才能很好的以then的形式链式调用,不要还是以callback形式返回
是有这问题,看试一下这样能不能接受了
var getIntelligence = db.getIntelligence() getIntelligence.then(function(bbsdata){ return Promise.all([getIntelligence, db.getUserById(userdata)]) }).then(function(array){ var bbsdata = array[0] var userdata = array[1] send(200) }).catch(function(){ send(500) })
利用了Promise的结果状态不可变特性,代码写得可能不怎么严谨,看能不能给你点灵感了
感谢大家的回答,上次提问后忘记回来查看回复了,抱歉抱歉,现在我的解决方法是用async/await来做的,然后用babel转换成ES5的语法,用的是nodejs6.0,在此之前的做法是直接用generator来做,配合co这个库,后来发现babel支持async/await后就下决心改掉了。
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
这用的是哪个db和orm,
getUserById这种返回的是个数组?, 找不到数据自动抛错误?你没用q吧?? 自豪地采用 CNodeJS ionic
你这些db里的方法封装的时候需要返回一个promise对象才能很好的以then的形式链式调用,不要还是以callback形式返回
是有这问题,看试一下这样能不能接受了
利用了Promise的结果状态不可变特性,代码写得可能不怎么严谨,看能不能给你点灵感了
感谢大家的回答,上次提问后忘记回来查看回复了,抱歉抱歉,现在我的解决方法是用async/await来做的,然后用babel转换成ES5的语法,用的是nodejs6.0,在此之前的做法是直接用generator来做,配合co这个库,后来发现babel支持async/await后就下决心改掉了。