promise使用请教
发布于 9 年前 作者 zjy01 3750 次预览 最后一次回复是 9 年前 来自 问答
之前在使用 mongoose 的时候因为回调问题在社区请教了各位, 根据回答使用了 promise。问题大体时 如何在两个异步都回调后运行某一个函数 比如我有3个操作
getA(){}//从mongodb中获取A
getB(){}//从mongodb中获取B
countAB(){}// 对A和B操作
原本我是这样写的
getA(function(){
getB(function(){
countAB();
})
});
后来使用promise后,变成了下面这样
Promise.all([getA(),getB()])
.then(function(data){
countAB(data);
});
当前,这对我来说的巨大的进步,免去了多次嵌套。 但是,如果遇到更加复杂一点的情况呢? 比如
getA(){}//从mongodb中获取A
getB(){}//从mongodb中获取B
getCfromA(){}//根据A从mongodb中获取C
getDfromB(){}//根据B从mongodb中获取D
countCD(){}// 对C和D操作
那么我的操作是
Promise.all([getA(),getB()])
.then(function(data){
Promise.all([getCfromA(data[0]), getDfromB(data[1])])
.then(function(data){
countCD()
})
});
事实上,我要做的操作更加麻烦,我又不可避免进入无限的回调嵌套之中。 想请问我是不是使用promise的方法不对,有没有更好使用promise的方法。
4 回复
Promise 会自动接受 Thenable 的返回值并执行。
Yeah. 单纯使用 promise我也觉得会这样 ~ So, 我是一开始就搭配 generator 使用, long long ago 写过一篇博客 http://magicdawn.ml/2015/01/10/generator-and-promise/ 现在讲这个的文章挺多的, 可以搜下
这个应该能帮到你 https://cnodejs.org/topic/56c6f7874463593b3f904b53
可参考NodeClub用的 EventProxy 😄