Javascript уменьшите с 10, затем сделайте что-нибудь, когда 0 - PullRequest
0 голосов
/ 24 июня 2019

У меня есть функция, которая при вызове уменьшится на 1. Она вызывается, когда пользователь сообщает что-то. Я хочу сохранить это, а затем, когда он достигнет 0, выполнить действие.

function userReported() {

    console.log('user report ' + add());

    var add = (function () {
          var counter = 10;
          return function () {
            counter -= 1; 
            return counter;

          }

    })();

}

Теперь проблема в том, что я могу вернуть счетчик, чтобы он записывал с 10. Но у меня есть проблема в том, что я могу добавить if / else перед возвратом счетчика, поскольку он не хранит переменную.

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

function userReported() {

    var limit = add;

    if ( limit <= 0 ) {
        console.log('Link does not work!'); 
        }
        else {
            console.log('user report ' + limit);
        }

    var add = (function () {
          var counter = 10;
          return function () {
            counter -= 1; 
            return counter;

          }

    })();


}

Как мне создать значение, увеличить / уменьшить указанное значение, а затем, когда оно достигнет числа -> сделать что-то?

Ответы [ 2 ]

2 голосов
/ 24 июня 2019

Обычно вы делаете это с функцией, которая возвращает функцию, которая захватывает счетчик в замыкании.Это позволяет возвращаемой функции поддерживать состояние в течение нескольких вызовов.

Например:

function createUserReport(limit, cb) {

    console.log('user report initiated' );

    return function () {
        if (limit > 0) {
            console.log("Report filed, current count: ", limit)
            limit--
        } else if (limit == 0) {
            limit--
            cb() // call callback when done
        } 
        // do something below zero?
    }
}

// createUserReport takes a limit and a function to call when finished
// and returns a counter function
let report = createUserReport(10, () => console.log("Reached limit, running done callback"))

// each call to report decrements the limit:
for (let i = 0; i <= 10; i++){
    report()
}

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

1 голос
/ 24 июня 2019

Хорошо, если вам нужно получить отчет на основе внешнего лимита, вы можете сделать что-то вроде этого:

var limit = 10;

function remove() {
  limit -= 1;
}

function userReport() {
  if (limit <= 0) {
    console.log("Link does not work!");
  } else {
    remove();
    console.log(`User report: ${limit}`);
  }
}

userReport();

Если это то, что вы хотите, удалите функцию удаления из userReport и установите ограничениепеременная out заставит все работать

...