2013-11-21 3 views
1

Как передать переменную id в функцию обратного вызова api resquests, поскольку функция имеет только три фиксированных аргумента?javascript (node.js) | используя внешние параметры в области функции обратного вызова

Я имею в виду, я не могу это сделать:

var id = 6; 
    request(url, function(err, resp, body, id) { 
//using here the returned body and the id too.. 
} 

и он не позволит мне добавить еще один аргумент, вызвать реальная функция

request(url, function(err, resp, body){}

С уважением,

+0

вы можете лучше объяснить свой вопрос? –

+2

Вам не нужно передавать его, он определяется в более широком диапазоне и, как таковой, автоматически доступен. – adeneo

ответ

4

Обратный вызов вызывается из модуля запроса, вы можете просто использовать переменную id как внутри обратного вызова, так как она определена в ее внешнем sco pe, но в тот момент, когда вы делаете function(err, resp, body, id), он создает новую переменную id внутри области анонимного обратного вызова, и идентификатор из внешней области не будет доступен там.

var id = 6; 
request(url, function(err, resp, body) { 
    //you can access id here as is. 
} 

Или, если вы действительно хотите, чтобы передать его, вы можете сделать (это не имеет смысла, хотя):

var id = 6; 
request(url, (function(id, err, resp, body) { 
    //you can access id here as is. 
}).bind(this, id); 
+0

Первый пример - пример закрытия (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures). Это стандартная практика в JS. Однако одна вещь, чтобы быть осторожным с этим, заключается в том, что если 'id' изменяется до того, как функция обратного вызова будет выполнена, в' id' будет указано новое значение, а не исходное значение. –

+0

Я также написал аналогичный ответ: http://stackoverflow.com/a/28120741/1695680 Я чувствую, что мой пример может быть немного более понятным для понимания. – ThorSummoner

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