如图,comment_model.getByKey()这个方法需要article_model.getByKey()返回的参数中的一部分作为参数,这样子不就还是需要嵌套?请问我的promise机制理解错了么 有没有不需要嵌套的方案?
来人啊,help~
再加一个链式promise呗
.then(function(data) { return comment_model.getByKey(data) }) .then(function(result) { ... })
@jeffreyluo 错了好多。把代码贴上来,我给你改改
@eeandrew 谢谢大大,这段就是核心代码啦,comment_model.getByKey 和article_model.getByKey 都是用Q封装过的返回promise的函数,现在大概是 Q.ALL([fs_read, article_model.getByKey ]) .then(function(data){ //这里comment_model.getByKey要用到data的属性 comment_model.getByKey(data.id).then(funtion(){ //do sth }); //然后这样感觉不是链式哈 })
@lonso 额,现在还没到性能问题啦,先练手,谢谢哈
@jflame 酱紫感觉可以有。
@jflame 但是这样第二个then就用不了第一个then的data了耶?
@jeffreyluo
Q.all([fs_read,article_model.getByKey]) .then(function(data){ var promises = []; primises.push(comment_model.getByKey({bid:data[1][0].bid}) promises.push(data); return Q.all(promises); }) .then(function(results){ // results[0] 对应comment_model.getByKey的结果 // results[1] 对应上面的data res.render(); }) .fail(function(err){ //deal with err }) .done();
@eeandrew THX!!正是我需要的!逛贴发现Q好像有点问题(内存泄露),看来要换个。。
@jeffreyluo 可以用bluebird 用法差不多
推荐bluebird,假设你的逻辑是 1、从文件读取内容readF(),同时数据对象查询queryBy() 2、根据上述函数的结果,进行新的异步运算proc(), 最简单的逻辑是 var promise = Promise.join(readF(), queryBy(), function(fileData, domainData) { var proc = Promise.method(proc); return proc(fileData, domainData); });
简单清爽。如果想兼容callback的调用方式,继续 return cb? promise.nodeify(cb) : promise; 现在这个方法既可以在promise chain里面跑也可以支持传统的callback模式了。
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
来人啊,help~
再加一个链式promise呗
@jeffreyluo 错了好多。把代码贴上来,我给你改改
@eeandrew 谢谢大大,这段就是核心代码啦,comment_model.getByKey 和article_model.getByKey 都是用Q封装过的返回promise的函数,现在大概是 Q.ALL([fs_read, article_model.getByKey ]) .then(function(data){ //这里comment_model.getByKey要用到data的属性 comment_model.getByKey(data.id).then(funtion(){ //do sth }); //然后这样感觉不是链式哈 })
@lonso 额,现在还没到性能问题啦,先练手,谢谢哈
@jflame 酱紫感觉可以有。
@jflame 但是这样第二个then就用不了第一个then的data了耶?
@jeffreyluo
@eeandrew THX!!正是我需要的!逛贴发现Q好像有点问题(内存泄露),看来要换个。。
@jeffreyluo 可以用bluebird 用法差不多
推荐bluebird,假设你的逻辑是 1、从文件读取内容readF(),同时数据对象查询queryBy() 2、根据上述函数的结果,进行新的异步运算proc(), 最简单的逻辑是 var promise = Promise.join(readF(), queryBy(), function(fileData, domainData) { var proc = Promise.method(proc); return proc(fileData, domainData); });
简单清爽。如果想兼容callback的调用方式,继续 return cb? promise.nodeify(cb) : promise; 现在这个方法既可以在promise chain里面跑也可以支持传统的callback模式了。