如何将承诺应用于 app.get?

How to apply promises to app.get?

如何将承诺应用于 app.get()? 在这个例子中,url returns 是一个空数组。我怎样才能让它在返回任何东西之前等待结果?

app.get('/getbills', function(req,res) {

    allBills =  new promise(function (fulfill, reject){
         Bills.find(function(err, bills){
            if(err)
                reject(err);

                fulfill(bills);
            });
        });

    allTransactions = new promise(function (fulfill, reject){
        Transactions.find(function(err, transactions){ 
            if (err)
                reject(err);
            else if (transactions.length !== 0){
                fulfill(transactions);

            }
        });
    });

    allBills.then(function(bills){

        allTransactions.then(function(transactions){
            var results = {};
            results = bills;
            results.transactions = transactions;

            // TODO: WORK WITH THE RESULTS HERE AND SEND TO THE CONTROLLER.
            console.log(results);
            res.send(results);
        });     
    });

});

谢谢!

Mongoose 已经 returns 承诺如果您不为其提供回调,那么您的代码在:

allBills =  new promise(function (fulfill, reject){
     Bills.find(function(err, bills){
        if(err)
            reject(err);

            fulfill(bills);
        });
    });

真的可以是:

allBills = Bills.find().exec();

至于聚合,大多数 promise 库都有一个 Promise.all 方法:

Promise.all([Bills.find().exec(), Transactions.find().exec()]).then(function(results){
    var ret = results[0]; // bills
    ret.transactions = results[1];
    console.log(ret);
    res.json(ret); // send it as json
});