Цикл не останавливается + не обновляет случайную строку

У моего скрипта есть две проблемы: он не обновляется случайным образом каждый новый раунд и работает вечно. Но, по моему мнению, это должно сделать и то и другое. Как я могу заставить цикл распознавать, что this.short изменился?

while ( ! this.short) {
    random = Math.random().toString(36).substring(2,7).toUpperCase();

    dpd.links.get({short: random}, function(res, err) {
        if (err)
            cancel('Error', 500);

        if ( ! res.length)
            this.short = random;
    });
}

1 ответ

Math.random() фактически возвращает псевдослучайное число, посеянное с текущего времени. Поэтому неудивительно, что он не обновляется для каждого цикла.

Что касается this.short: this всегда относится к "владельцу" текущей функции. Итак this в this.short = random вероятно, отличается от this в вашем цикле Что вам нужно сделать, это назначить this к переменной в первую очередь. Например:

var current = this;
while (!current.short) {
    ...
    current.short = random;
}
Другие вопросы по тегам