Как изменить значение json во вложенном (mon goose) обратном вызове - PullRequest
0 голосов
/ 29 апреля 2020

Я бы хотел изменить массив json во вложенной функции, которую я создал как обратный вызов в запросе mon goose.

Я озадачен, почему невозможно изменить json массив в этой области. Любая попытка приводит к исходному значению 'default', которое может быть показано последним console.log(answer)

Поскольку я являюсь разработчиком Embedded C с новыми навыками ie в javascript (максимум) Я хотел бы знать, как изменить любое значение во вложенной области видимости. И, пожалуйста, поделитесь некоторыми предысториями, почему моя функция показывает такой тип поведения.

Любая помощь приветствуется ...

function pwdGen(body) {
  var answer = [{
    error: errors["E004"],
    user: '',
    password: 'default',
    timeout: 0,
    active: false
  }];
    user.find().where("usertype").equals("superuser").select("username password").exec(
      function (err, users) {
        if(users.isArray && users.length==0) {
          console.log("exists");
          answer[0].password="exist_pwd";
        } else {
          console.log("empty");
          answer[0].password="empty_pwd";
        }
      }
    );
    answer[0].user="asdave"
    answer[0].timeout=1;
    console.log(answer);
    return answer;
}

1 Ответ

1 голос
/ 29 апреля 2020

Проблема

Javascript is asyn c по своей природе означает, что не выполняет такие команды, как доступ к сети, синхронно, например C, C ++ или Java.

Решение

Обещания здесь для спасения.

Вам нужно сделать что-то вроде этого:

var users = user.find().where("usertype").equals("superuser").select("username password").exec();

users.then(function(user) {

        if(users.isArray && users.length==0) {
          console.log("exists");
          answer[0].password="exist_pwd";
        } else {
          console.log("empty");
          answer[0].password="empty_pwd";
        }      
})

РЕДАКТИРОВАТЬ

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

Отлично ресурс , чтобы получить идею.

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