2016-10-20 6 views
0

я хотел бы получить переменную, вызов функции, i'v искал, но я не нашел ..JS как получить переменную, вызывающую функцию?

Чтобы быть более ясным,

var time = 60 

function timer() { 
    variableName-- 
    console.log(variableName) 
    return variableName 
} 

setInterval(() => { 
    time = timer() 
}, 1000) 

Итак, я хотел бы знать VARIABLENAME, на самом деле имяПеременной время, так что я могу сделать

time = timer(time) 

Но, это не очень .. я не знаю, есть, очевидно, способ получить переменную назначенную функцию, (я не знаю, как скажите, но я надеюсь, что вы меня поняли)

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

Это как:

socket.on('timerStart',() => { 
    TIMER = timer() 
    console.log(TIMER) 
} 

function timer() { 
    if(variableThatInvoked > 0) { 
     variableThatInvoked-- 
     return variableThatInvoked 
    } 
} 

Итак, как получить variableThatInvoked?

+0

таймер вызываются асинхронно, то возвращаемое значение не возвращается в 'time' –

ответ

0

Вы могли бы попробовать что-то вроде этого:

var time = function timer() { 
    console.log("time called"); 
} 

Ниже ваша функция асинхронная, которая использует setTimeout

function async(your_function, callback) { 
    setTimeout(function() { 
     your_function(); 
     if (callback) {callback();} 
    }, 0); 
} 


async(time, function() {console.log(time);}); 
+0

Ну, черт возьми, что я wan't сделать мой код тем яснее и многократно использую, и в вашем enxemple мне нужно объявить о своей функции, я думаю, что я не объясняю достаточно своей проблемы. –

+0

. Вышеприведенный код более возможен, поскольку вы не делаете свою функцию таймера чистой и оставляете ее интерфейс async для выполнения задания с помощью дополнительной callb помогите, что бы вы хотели ... – Thalaivar

0

Это прекрасно, чтобы сделать что-то вроде

var time = 60 
 

 
function timer(variableName) { 
 
    variableName-- 
 
    console.log(variableName) 
 
    return variableName 
 
} 
 

 
setInterval(() => { 
 
    time = timer(time) 
 
}, 1000)

Вы можете точно видеть, что вы проходите.

И в time = timer() для вызова функции нет ссылки на time в любой точке

+0

Yep Мне нравится в вашем примере, но я думаю, что его немой указать «время» во второй раз –

+0

Вы можете использовать что-то вроде «curry», но вам нужно будет использовать объекты, чтобы он работал правильно с вашим примером. Imo, проходящий «время», в порядке, он чист, и вы можете сразу увидеть, что происходит – taguenizy

0

Ну, спасибо вам, ребята, i'v видно, что это не Возможное, так i'v превратили его в класс логики

так, thoses, которые были похожи на меня, есть класс Timer:

  class Timer { 
       constructor(left, rate, func, callback) { 
        this.left = left 
        this.rate = rate 
        this.func = func 
        this.cb = callback 
       } 

       start() { 
        this.interval = setInterval(() => { 
         this.func() 
         this.left-- 
         if(this.left < 0) {clearInterval(this.interval); this.cb()} 
        }, 1000/this.rate) 
       } 
      } 

И так, когда получите сервер сокет, которые говорят: «эй, давайте начнем таймер!»:

  socket.on('startTimer', (servLeft) => { 
       timer = new Timer(servLeft, 2,() => { 
        console.log(timer.left) 
        },() => {console.log('timer ended!')}) 

       timer.start() 
      }) 

Логический рендеринг:

<!DOCTYPE html> 
 
<html> 
 
    <head> 
 
     <title>Timer</title> 
 
     <script> 
 
      class Timer { 
 
       constructor(left, rate, func, callback) { 
 
        this.left = left 
 
        this.rate = rate 
 
        this.func = func 
 
        this.cb = callback 
 
       } 
 

 
       start() { 
 
        this.interval = setInterval(() => { 
 
         this.func() 
 
         this.left-- 
 
         if(this.left < 0) {clearInterval(this.interval); this.cb()} 
 
        }, 1000/this.rate) 
 
       } 
 
      } 
 

 

 
      timer = new Timer(20, 1,() => {console.log(timer.left)},() => {console.log('Timer ended!')}) 
 
      timer.start() 
 
     </script> 
 
    </head> 
 

 
    <body> 
 
     <hi>Simple timer</hi> 
 
    </body> 
 
</html>

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