2016-06-27 8 views
-1

Я вызываю http.request(). End(), и мне нужно передать переменную функции обратного вызова.В узле JS как передать переменную в обратный вызов http.request?

Как это сделать?

Для моей ситуации пользователь обращается к серверу, сервер отправляет HTTP-запрос нашему API, а затем сервер должен ответить на этот пользователь информацией, возвращенной из HTTP-запроса. Я не могу понять, как это сделать, не используя глобальную переменную, что было бы проблемой, поскольку, если бы 2 человека должны были сделать это сразу, оба сообщения были отправлены одному пользователю

Не знаете, как это помогло бы, но вот вид, что я пытаюсь сделать ..

callback = function(response){ 
    //... 
    respondToUser(userId); 
} 

function doStuff(userId){ 
    http.request({host:'www.google.com'}, callback).end(); 
} 
+0

Покажите свой код. –

+0

* «Я не могу понять, как это сделать, не используя глобальную переменную ...» * Не требуется глобальная переменная, просто что-то закроет ваш обратный вызов 'request'. Если вы покажете свой код, мы сможем помочь вам в этом. –

+0

Если вы не используете анонимную функцию в качестве обратного вызова, вы должны просто передать то, что хотите. – master565

ответ

0

это называется «закрытие», где вы оставляете контекст с помощью функции вы пишете, как это

function doStuff(userId){ 
    var callback = function(response){ 
     //... 
     respondToUser(userId); 
    } 

    http.request({host:'www.google.com'}, callback).end(); 
} 
+0

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

+0

Возможно, вы организовали свой код таким образом, чтобы он работал на языке процедурного программирования (например, на Java или C++) - так, как вы структурируете свой код на функциональном языке, таком как JavaScript, совсем другое. – Soren

+0

Да, вы, вероятно, правильно. Я переписал все функции как одну более сложную функцию с обратным вызовом внутри, поэтому спасибо за ответ – user2322082

Смежные вопросы