을 기능을 처리하는 방법을 나는 다음과 같은 문제가 있습니다자바 스크립트 - 순서가 아닌 한 번에
이의 내가 그것을받은 매개 변수에 따라 뭔가를 할 배열을 처리하는 기능을한다고 가정 해 봅시다합니다. 그래서 뭔가는 같은 :
var arr = [];
function processArr(p1, p2, ....){};
P1, P2 등은 우리가 얻을 수 있도록 서버에서 수신 :
실제로위한 PHP는하지만 정말 중요하지 않습니다processArr(<?php echo $p1; ?>, <?php echo $p2; ?>, ...)
processArr(<?php echo $p1; ?>, <?php echo $p2; ?>, ...)
processArr(<?php echo $p1; ?>, <?php echo $p2; ?>, ...)
processArr(<?php echo $p1; ?>, <?php echo $p2; ?>, ...)
processArr(<?php echo $p1; ?>, <?php echo $p2; ?>, ...)
.
문제점 : js는 동시에 호출하지 않고 (동시에는 아니지만 충분히 근접하여) 호출을 처리합니다. 따라서 첫 번째 호출에서 배열에 요소를 추가하고 (다른 처리) 두 번째 호출에서 요소를 삭제하려고하면 요소가 삭제되지 않으므로 요소가 아직 추가되지 않았기 때문에 존재하지 않습니다.
두 번째 전화를 걸어 첫 번째 전화가 끝날 때까지 기다리려면 어떻게해야합니까?
추가 기능 : 나는의 0.5 초 모든 것이 잘 작동 가정 해 봅시다와 두 번째 호출에 시간 제한을 추가하는 경우
function processSaved(act, params)
{
if (act == 1)
{
var newUser = params;
if (user.id == newUser.id)
user = clone(newUser);
activeElementIndex = i;
// Go to the next level from the active element level
var newLevel = newUser.level;
// Set current level
currentLevel = Math.max(currentLevel, newLevel);
// Create new object and push it to elements array
var obj = newUser;
elements.push(obj);
activeElementIndex = newUser.parent;
// Add element to order list
if (orderElements.length + 1 > newLevel)
{
var added = 0;
for (var i = 0; i < orderElements[newLevel - 1].el.length; i++)
{
if (elements[activeElementIndex].column < elements[elements[orderElements[newLevel - 1].el[i]].parent].column)
{
orderElements[newLevel - 1].el.splice(i, 0, elements.length - 1);
added = 1;
break;
}
}
if (added == 0)
orderElements[newLevel - 1].el.push(elements.length - 1);
}
else
{
var tmp = new Array();
tmp.push(elements.length - 1);
var obj = {"el": tmp};
orderElements[newLevel - 1] = obj;
}
flagCreate = 1;
actions.push(newUser);
// Call the rearange function
rearangeElementsWithoutRedraw();
}
else if (act == 0)
{
activeElementIndex = params.index;
deleteNode();
}
return true;
}
먼저 호출이 행위로 이루어집니다 = 1 두 번째는 행위 = 0으로한다. 그렇지 않으면 요소가 존재하지 않기 때문에 제거시 오류가 발생합니다. 이것은 첫 번째 완료 전에 두 번째 호출이 수행되었음을 나타냅니다.
이 'processArr'는 정확히 무엇을 수행합니까? – Joseph
아니요, 그렇지 않습니다. 아니면 processArr가 비동기 작업을 수행합니까? – Bergi
processArr 코드에 문제가있는 것 같습니다. 무엇을하려고합니까? –