Как получить значение из функции обратного вызова? - PullRequest
0 голосов
/ 03 января 2019

Мне нужно получить значение переменной внутри функции setTimeout.Проводя некоторые исследования, я обнаружил функцию обратного вызова.Используя это, я получаю значение, но мне удалось только выяснить, как предупредить его или записать его в консоль.Теперь мне нужно присвоить его переменной.

function x(callback){
    setTimeout(function(){
      length = text.length;
      callback(length);
    },100, text);
  }
  x(console.log.bind(console));

эта консоль записывает длину правильно.Теперь, как мне получить только значение, чтобы я мог присвоить его переменной?

Я хочу, чтобы значение длины было присвоено переменной длины вне функции, чтобы я мог работать с ней дальше.Как бы я поступил так?

Ответы [ 2 ]

0 голосов
/ 03 января 2019
function x(callback){
    setTimeout(function(){
      length = text.length;
      callback(length);
    },100, text);
  }
  x(console.log.bind(console));

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

функция х установить параметр callback, поэтому вы не можете использовать его как функцию создать другую функцию обратного вызова и передать параметр с диф-именем

Например:

var text = "abc";

function x(text){
    setTimeout(function(){
      callback(text);
    },100, text);
  }

  function callback(text){
    console.log(text);
    console.log(text.length);
  }

  x(text);
0 голосов
/ 03 января 2019

Вы можете использовать свой обратный вызов.

function x(callback){
  setTimeout(function(){
    length = text.length;
    callback(length);
  },100, text);
}
let yourLength;
x(length => {
  console.log(length);
  yourLength = length
  // Do something else
});

Также вам не следует присваивать длину только переменной, поскольку она выполняется асинхронно.Я добавил код, чтобы присвоить его переменной yourLength.Но когда код после вызова обратного вызова выполняется, вы не можете быть уверены, что обратный вызов уже возвращен и переменная имеет значение.

Лучшим и более читаемым решением будет использование обещаний или асинхронные методы и ожидают

...