mongoose下的promise技巧

在Promise大行其道的世界里,使用promise可谓是家常便饭了,写一个漂亮的promise极其重要

本文将会基于Express环境实战mongoose的promise,帮大家避免一些常见的错误并对promise链进行调整以提高其可读性

最后,本文将会介绍一种极少见的promise奇淫怪技,解决一些难以解决的又不得不解决的异步冲突

前期准备

虽然mongoose本身也有自带promise且大部分操作返回就是一个promise对象,但大多数情况下我们还是毅然决然的换成bluebird这个promise库,其中提供了大量的
promise操作可供我们使用,废话少说,赶紧上路!

Bad example

你可能看过这样的Promise链中链

1
2
3
4
5
6
7
8
9
10
11
12
13
user_group.findByName('admin')
.then(function(doc) {
user.findUser(id)
.then(function(userObj) {
....
})
.catch(function(err) {
next(err);
});
})
.catch(function(err) {
next(err);
});

看到这里不用写都应该能发现,这Promise已经失去了它原本的使命,层层嵌套,犹如又回到了地狱回调的节奏,可读性不免让人觉得糟糕

Let’s pratice

我们可以来动手改写一下

未完待续..

作者

马克鱼

发布于

2017-05-02

更新于

2025-10-12

许可协议