如图,comment_model.getByKey()这个方法需要article_model.getByKey()返回的参数中的一部分作为参数,这样子不就还是需要嵌套?请问我的promise机制理解错了么 有没有不需要嵌套的方案?
来人啊,help~
再加一个链式promise呗
.then(function(data) {
return comment_model.getByKey(data)
})
.then(function(result) {
...
})
@jeffreyluo 错了好多。把代码贴上来,我给你改改
@lonso 额,现在还没到性能问题啦,先练手,谢谢哈
@jflame 酱紫感觉可以有。
@jflame 但是这样第二个then就用不了第一个then的data了耶?
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模式了。