2016-08-05 5 views
-1

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

Во-первых, вот обычай промежуточного слоя:

// Get list of admins 
export var listAdmins = function(req, res, next) { 
    var admin = []; 

    client.admins.list((res) => { 
    var body = res.body.admins; 
    // var admin = []; 

    body.forEach(function (body) { 
     if (body.type === 'admin') { 
     admin.push(body); 
     } 
    }); 
    req.admins = admin; 
    console.log(req.admins); 
    console.log('Finished fetching admin data'); 
    next(); 
    }); 
} 

закомментирована console.log в функции обратного вызова дает точные данные, которые я хочу передать, и объект проходит хорошо. К сожалению, если я попытаюсь захватить это за пределами обратного вызова, он всегда появляется как неопределенный. Я переместил объект массива admin за пределы обратного вызова, думая, что это проблема с областью, но ничего не решила.

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

Заранее спасибо!

EDIT: Да, перемещение кода во вложенный функциональный блок разрешено для его правильной установки.

ответ

1

client.admins.list()асинхронный и возвращается сразу, до req.admins установлен. Переместите последние три строки кода внутри (в конце) обратный вызов передан в client.admins.list().

+0

Да, я думал, что это очевидно, но я думаю, что вы пытаетесь сказать, что все, что ожидается, должно быть в этой функции? Что касается этого, то req.admins все еще не оставляют этот бит промежуточного программного обеспечения. Как только промежуточное ПО завершено, свойство в запросе исчезнет, ​​даже если оно передается через следующую функцию в следующее промежуточное программное обеспечение. – DBrown

+0

Если у вас все еще возникают проблемы после реализации предлагаемого мной решения, вам нужно будет опубликовать более подходящий код в вашем вопросе, который продемонстрирует проблему. – mscdex

+0

После сброса запуска отладки, чтобы проверить, был ли он установлен, он показывался за пределами промежуточного ПО, поэтому я предполагаю, что это было изменение, которое babel-watch не применялось вначале. Спасибо вам за помощь. – DBrown