如何将promises应用到app.get?

时间:2015-01-04 07:49:10

标签: node.js express mongoose promise

如何将promises应用于app.get()? 在此示例中,url返回一个空数组。如何在返回任何内容之前让它等待结果?

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);
        });     
    });

});

谢谢!

1 个答案:

答案 0 :(得分:3)

如果您没有为其提供回调,那么Mongoose已经返回了承诺,因此您的代码位于:

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
});
相关问题