在变量为“时通过ajax调用循环退出”;否";在javascript中
在过去的两天里,我一直在努力寻找解决方案。如果有人帮助我,我会很有帮助的。我正在使用nodejs和Vue在变量为“时通过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: &
- 当我得到“否”结果并需要停止循环时,我应该如何从ajax调用中走出来
- 无法访问
数组变量userExist
- 当我转换为
Vue变量时也是如此+this.info['isthisUser']
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;