Javascript 循环不';t停止+;不';t更新随机字符串

Javascript 循环不';t停止+;不';t更新随机字符串,javascript,while-loop,deployd,Javascript,While Loop,Deployd,我的脚本有两个问题:它不会每一轮都随机更新,而且会一直运行。但在我看来,这两者都应该做。。如何使循环识别此.short已更改 while ( ! this.short) { random = Math.random().toString(36).substring(2,7).toUpperCase(); dpd.links.get({short: random}, function(res, err) { if (err) cancel(

我的脚本有两个问题:它不会每一轮都随机更新,而且会一直运行。但在我看来,这两者都应该做。。如何使循环识别此.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;
    });
}
实际上,Math.random()返回一个。因此,它不会为每个循环更新也就不足为奇了

至于
this.short
this
总是指当前函数的“所有者”。因此
this.short=random
中的
this
可能与while循环中的
this
不同。您需要做的是首先将
这个
赋值给一个变量。例如:

var current = this;
while (!current.short) {
    ...
    current.short = random;
}

谢谢,我会用不同的。但是脚本仍然没有停止循环,您希望循环在哪里/什么时候停止?如果!这个.short和res.length是真的,循环将永远运行。第9行应该这样做。我在等待一个随机数,它给我一个result.length为0,然后它应该停止,如果random没有更新(参见我的答案),那么result.length为什么要更改?我已经更新了random函数,它仍然在运行。由于数据库此时为空,任何第一个结果的result.length都应为0。有趣的是,如果我在闭包外改变这个。short,循环似乎得到了不同。