Идентификатор переменной не определен вне луны goose функция NODE JS - PullRequest
1 голос
/ 29 января 2020

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

events.js:187
      throw er; // Unhandled 'error' event
      ^

ReferenceError: barberInfo is not defined

это мой код в node js

barber.findOne({id:idBarber},function(err,response){
        if(response){
          //if barber exists in the database 
          barberInfo =response.toJSON();
        }else{
          //if no exists in the database
          barberInfo={
            id:0,
            stairs:0.0,
            numberServices:0,
            urlImg: "https://i.pinimg.com/736x/a4/93/25/a493253f2b9b3be6ef48886bbf92af58.jpg",
            name: "Sin",
            lastName : "Asignar",
            phone : "000-000-0000"
          }
        }
      });
console.log(barberInfo);

Я определил переменную в двух случаях, как я могу ее определить?

Ответы [ 5 ]

2 голосов
/ 29 января 2020

In Javascript var являются «областью действия». Таким образом, область действия barberInfo является функцией обратного вызова. Переменная не доступна вне функции.

То, что вы пытаетесь сделать, это напечатать значение response. Вы должны сделать это внутри функции обратного вызова. Если вы сделаете это снаружи, это будет выполнено немедленно, и вы не получите ожидаемый результат. Таким образом, следующий код даст « неверные результаты ».

let response = null; // define response variable

collection.findOne({id:searchId}, function(err, result) {
  response = result;
});

console.log(response); //this line will be executed immediately after "findOne" call. 
                       //It will not wait for the callback function execution.

Попробуйте написать код с помощью обещаний.

collection.findOne({id:searchId}).then(result => {
  console.log(result);
  return result;
}).catch(err => {
  //handle error
});
2 голосов
/ 29 января 2020

barberInfo не определено, его нужно определить перед присвоением какого-либо значения.

barber.findOne({id:idBarber},function(err,response){
        let barberInfo;
        if(response){
          //if barber exists in the database 
          barberInfo =response.toJSON();
        }else{
          //if no exists in the database
          barberInfo={
            id:0,
            stairs:0.0,
            numberServices:0,
            urlImg: "https://i.pinimg.com/736x/a4/93/25/a493253f2b9b3be6ef48886bbf92af58.jpg",
            name: "Sin",
            lastName : "Asignar",
            phone : "000-000-0000"
          }
        }
        console.log(barberInfo);
      });
1 голос
/ 29 января 2020

Вы можете попробовать этот код ниже:

const myexampleFunction = async() => {
  const barberInfo = barber.findOne({id:idBarber},function(err,response){
    return new Promise((resolve, reject) => {
      if(response){
        //if barber exists in the database 
        resolve(response.toJSON())
      }else{
        resolve({
          id:0,
          stairs:0.0,
          numberServices:0,
          urlImg: "https://i.pinimg.com/736x/a4/93/25/a493253f2b9b3be6ef48886bbf92af58.jpg",
          name: "Sin",
          lastName : "Asignar",
          phone : "000-000-0000"
        });
      }
    })
  });
  // your barberinfo
  console.log(await barberInfo);
}

Из приведенного выше примера я поместил ваш код в myexampleFunction, поэтому, если у вас есть какая-то функция, вы можете поместить свой код и не забудьте добавить функцию async в вашу функцию, потому что здесь мы используем await.

Надеюсь, она вам поможет.

1 голос
/ 29 января 2020

barberInfo не определено, и вам также необходимо добавить проверку ошибок в ваш обратный вызов. Попробуйте следующее

barber.findOne({id:idBarber},function(err,response){
        let barberInfo = null;
        if (err) {
          console.log(err.stack);
          return;
        }
        if(response){
          //if barber exists in the database 
          barberInfo =response.toJSON();
        }else{
          //if no exists in the database
          barberInfo={
            id:0,
            stairs:0.0,
            numberServices:0,
            urlImg: "https://i.pinimg.com/736x/a4/93/25/a493253f2b9b3be6ef48886bbf92af58.jpg",
            name: "Sin",
            lastName : "Asignar",
            phone : "000-000-0000"
          }
        }
        console.log(barberInfo);
      });
1 голос
/ 29 января 2020

Переменная barberInfo не определена вне функции обратного вызова. Вам нужно переместить строку: console.log(barberInfo); в функции обратного вызова

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...