mongoose下的promise技巧

目录

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

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

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

前期准备

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

Bad example

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

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

我们可以来动手改写一下

未完待续..