关于promise的库Q的使用问题
新手求助 最近使用q这个库来尝试解决nodejs的异步调用的问题,发现写起来和原来的回调方式差别不大,代码很短:
怎么才能写的更优雅一点?像这种到某一步又要用到前几步的结果的时候怎么办?看到百度的例子都是好理想化,每一步所需要的数据都是前一步给的。
5 回复
这用的是哪个db和orm, 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后就下决心改掉了。