2016-12-09 4 views
0
async1.each(arr, function(arrayMember) {  
    orders.where('name', arrayMember).fetch({withRelated: ['allOrders']}). 
    then(function(dd2, callback) { 
    dd2 = dd2.toJSON(); 
    var sendMemberOrder = {}; 
    sendMemberOrder.name = dd2.name; 
    sendMemberOrder.lastOrder = dd2.allOrders.length; 
    res.send(sendMemberOrder); 
    }); 
}, function(err) { 
    if (err) { 
    console.log("err"); 
    } 
}); 

Я пытаюсь использовать res.send Express в() функцию, но учитывая то, что я использую async.each, я получаюИспользование res.send Express.js в() с async.each

заголовки уже отправлены

ошибку.

Как передать результат каждой итерации в виде массива при выполнении запроса?

+0

Не могли бы вы показать нам все промежуточное программное обеспечение, включающее часть 'res.send'? –

+0

Я отредактировал мой вопрос. Если я попытаюсь таким образом, я получаю сообщение об ошибке. Как я могу организовать свою функцию async, чтобы я мог отправить все через res.send() в браузер, когда он будет завершен? – salep

+0

Вы хотите, чтобы это был массив JSON 'sendMemberOrders'? Вам нужно потоковое решение или достаточно ли хранить данные в памяти до тех пор, пока он не будет отправлен? –

ответ

1

Поскольку вы уже используете обещания здесь, я хотел бы дозволить вас использовать async.js здесь. В любом случае ваш код сломан, так как он не вызывает обратный вызов вообще, а параметр обратного вызова объявляется в неправильной функции. Вместо этого вы можете попробовать следующее:

app.get(your_route, function(req, res, next) { 
    // obtain arr 
    Promise.all(arr.map(function(arrayMember) { 
    return orders.where('name', arrayMember) 
    .fetch({withRelated: ['allOrders']}) 
    .then(function(dd2) { 
     dd2 = dd2.toJSON(); 
     return { 
     name: dd2.name, 
     lastOrder: dd2.allOrders.length 
     }; 
    }); 
    })).then(function(resultData) { 
    res.send(resultData); 
    }).catch(function(err) { 
    console.log(err); 
    next(err); 
    }); 
});