在变量为“时通过ajax调用循环退出”;否";在javascript中

在变量为“时通过ajax调用循环退出”;否";在javascript中,javascript,vue.js,Javascript,Vue.js,在过去的两天里,我一直在努力寻找解决方案。如果有人帮助我,我会很有帮助的。我正在使用nodejs和Vue 当我得到“否”结果并需要停止循环时,我应该如何从ajax调用中走出来 无法访问userExist数组变量 当我转换为this.info['isthisUser']Vue变量时也是如此+ console.log(this.info['isthisUser'])显示以下内容 [__ob__: Observer] 0: "No" 1: "No" 2: &

在过去的两天里,我一直在努力寻找解决方案。如果有人帮助我,我会很有帮助的。我正在使用nodejs和Vue

  • 当我得到“否”结果并需要停止循环时,我应该如何从ajax调用中走出来
  • 无法访问
    userExist
    数组变量
  • 当我转换为
    this.info['isthisUser']
    Vue变量时也是如此+
console.log(this.info['isthisUser'])
显示以下内容

[__ob__: Observer]
0: "No"
1: "No"
2: "No"
3: "Yes"
length: 4
__ob__: Observer {value: Array(4), dep: Dep, vmCount: 0}
__proto__: Array

这段代码已经过时了,而且也是
$。ajax
请求是并行执行的,因此提前退出循环不会阻止它们的完成,除非它们是显式完成的

如果请求应该按顺序执行,一种简单的方法是
async..wait
<代码>$。ajax能够返回承诺:

async function mycheck(val) { 
    ...
    var array = [];
    for (var u=0; u<usCNT; u++) {
        var result = await $.ajax({
          type: "POST",
          url: '/getStates',
          data: { user: checkThisUser,}
        });
        if (result === 'No') {
            throw new Error('not exist');
        }
        array.push(result);
    }
    return array;
};

这回答了你的问题吗?您正在进行一系列异步调用,因此所有调用都已启动。。。。循环操作系统可能在您尝试取消它之前完成。ajax是异步的。这意味着在其中一个调用的响应返回到您的
console.log()
之前很久,所有调用都已发出。在您记录它们的时候,您的数组是空的。非常感谢Estus Flask。我会试试你的建议。Estus Flask,我得到以下console.log(userExist)的代码;Promise{}proto:Promise[[PromiseState]]:“已履行”[[promisersult]]:false-是否可以获取promisersult的值?如果我可以从PromiserResult访问此值,那么我三天的问题就解决了。建议的问题中也解释了这一点。这个目标是对结果的承诺。您无法从中获取结果,因为此时结果不可用。调用方也应该包含承诺,因为整个过程是异步的。它应该是
async
并包含
try{let result=wait mycheck(thisUser)…}catch(err){…}
。或者使用原始承诺并包含
mycheck(thisUser)。然后(result=>…)。catch(…)
。它应该处理错误,因为它们可能发生。这两个代码段是等效的,但是如果您使用transpilation并且不需要编写ES5源代码,那么
async..await
更可取。这就是问题中的段落所说的。非常感谢埃斯特斯。我对亚松克了解甚少。等待今天。
[__ob__: Observer]
0: "No"
1: "No"
2: "No"
3: "Yes"
length: 4
__ob__: Observer {value: Array(4), dep: Dep, vmCount: 0}
__proto__: Array
async function mycheck(val) { 
    ...
    var array = [];
    for (var u=0; u<usCNT; u++) {
        var result = await $.ajax({
          type: "POST",
          url: '/getStates',
          data: { user: checkThisUser,}
        });
        if (result === 'No') {
            throw new Error('not exist');
        }
        array.push(result);
    }
    return array;
};
    ...
    for (var u=0; u<usCNT; u++) {
        var result = await $.ajax({
          type: "POST",
          url: '/getStates',
          data: { user: checkThisUser,}
        });
        if (result === 'No') {
           return false;
        }
    }
    return true;