Ссылка на внешнюю функцию var изнутри функции в узле

Мне интересно, как получить доступ к конкретной переменной в следующем коде:

Файл foo.js

function a(id, callback) {
  //Do things
  if (err) {
    callback(err);
  } else {
    callback(null, result);
  }
}
function b(x, callback) {
  //Do things
  if (err) {
    callback(err);
  } else {
    callback(null, result);
  }
}

Файл question.js

var id = 1;
var x = 2;
foo.a(id, function(err, result){
  if (err) {
    //Do stuff
  } else {
    foo.b(x, function(err, result){
      if (err) {
        //Do stuff
      } else {
        console.log("Function A: " + result); // I want to log result from foo.a
        console.log("Function B: " + result);
      }
    });
  }
});

Как я могу получить доступ к функции foo.b для изменения результата функции foo.a?

Вопрос в том, существует ли какой-либо способ ссылки на переменную без изменения имени. Что-то вроде this.result или же super.result ,

1 ответ

Решение

Вопрос в том, существует ли какой-либо способ ссылки на переменную без изменения имени. Что-то вроде this.result или же super.result,

Нет, нет обозначения для доступа к идентификатору из внешней области видимости (в вашем случае result параметр в aобратный вызов), который вы скрыли, повторно используя имя идентификатора в области ошибок (в вашем случае result параметр на bобратный звонок).

Вместо этого просто дайте параметрам разные имена, так как ваш b обратный вызов закрывается над result ваш a обратный вызов получает:

var id = 1;
var x = 2;
foo.a(id, function(err, aresult){ // <=== `aresult` instead of `result`
  if (err) {
    //Do stuff
  } else {
    foo.b(x, function(err, bresult){ // <=== `bresult` instead of `result`
      if (err) {
        //Do stuff
      } else {
        console.log("Function A: " + aresult); // <=== Use them
        console.log("Function B: " + bresult); // <===
      }
    });
  }
});
Другие вопросы по тегам