异步在最后一项之前调用回调?

Async is calling callback before last item?

我有一个处理对象列表的 async.eachSeries() 函数。在列表之后我想要一个 res.send() 函数,这样我就可以将结果发送回前端。 但是我得到了

'Can't set headers after they are sent'

res.send() 行出错,看起来是在列表完全处理之前调用了该函数。

module.exports.createOrder = function(req,res){
    console.log("CreateOrder");
    var orderDescription = "";
    var payId = new ObjectId(); //create one id, to pay multiple orders at one time    
    var shopList = groupByShop(req.body.cart);
    var orders = [];
    var result = {};
    console.log("before async");
    //the cart is now sorted by shop, now we can make orders for each shop
    async.eachSeries(Object.keys(shopList), function(key, callback){
        console.log("in async");
        var shop = shopList[key];
        console.log("before saveOrder");
        saveOrder(payId, shop, key, req.body, req.user, function(err, newOrder){
            console.log("in saveorder");
            if(err){
                console.log("Err", err);
                callback(err);
            }else{
                console.log("order saved");
                orders.push(newOrder);
                callback();
            }
        })
    }, function(err){
        if(err){
            console.log("One or more orders are not saved:", err);
            return res.status(400).json(err);
        }else{
            console.log("All orders are processed");
            result = {
                message: 'OK',
                order: {
                    payId: orders[0].payId
                }
            };
            return res.send(200).json(result);
        }       
    })
}

这里出了什么问题?目前在“shopList”中使用一个对象进行测试,并且所有日志行都在服务器控制台中可见。

当我删除该行时,该函数工作正常,但是,当然,他没有发送任何结果。我还尝试将行移到函数之外,但这当然会再次导致空 result{} 和函数完成前的发送。

res.send(200) 将发送内容为“200”的 HTML 响应 - 你想要做的是 res.status(200).json(result) 尽管 res.json(result) 也应该可以正常工作。