嵌套循环 同步还是异步?



我有一个名为noNCreatedResources的数组。我想对数组的每个项目执行一些操作createdResources并在数组中推送项目,并从数组中删除该项目noNCreatedResources并继续这样做,直到noNCreatedResources为空。为此,我编写了CreateResources函数,包括嵌套的while和for循环。它工作正常,但我意识到它不能同步工作。例如:它必须在 while 循环中迭代两次,但迭代 4 次,我不知道为什么。 我想我不明白node.js的异步/等待/非阻塞概念的概念。任何身体可以帮助我意识到问题是什么吗?

CreateResources = async () => {
while (this.noNCreatedResources.length > 0) {
for (let index = 0; index < this.noNCreatedResources.length; index++) {
if (this.resourceHasCreatedDependencies(this.noNCreatedResources[index])) {
const resourceModel = this.someOperation(this.noNCreatedResources[index]);
this.createdResources.push(resourceModel);
this.noNCreatedResources.splice(index, 1);
}
}
}
}

首先,你没有在函数中做任何异步的事情,所以你可以从函数中删除async关键字。由于您没有执行任何异步操作,因此您的问题与此无关。这更像是海事组织的一个执行问题。

你的while循环对于你想要实现的目标毫无用处。另外,你的逻辑坏了!

示例:以下代码将输出135

let x = [1,2,3,4,5];
for(let i = 0; i < x.length; i++) {
console.log(x[i]);
x.splice(i, 1);
}

我认为您无需从数组中删除项目即可达到预期结果。如果您需要重置阵列,那么最后您只需执行此操作x = []重置数组即可。

您遇到的问题不是由于异步调用造成的。实际上,您的代码是完全同步的。尝试查看"noNCreatedResources"的创建/更新位置。异步调用发生在您发送 http 请求、读取文件等时,换句话说,在您的代码中不会发生的操作。它允许代码继续,而不会阻止下一个函数调用,当承诺实现时,调用回调函数。

最新更新