Вы никогда не пишете в своем дереве, только в локальном var ptr. В вашем коде вы должны вставить temp, когда найдете NULL-потомка.
void insert(int data)
{
node* temp=new node;
node *ptr=root;
temp->data=data;
temp->left=NULL;
temp->right=NULL;
if(ptr==NULL)
{
root=temp;
}
else
{
while(1)
{
if(data<=(ptr->data)) {
if(ptr->left) ptr=ptr->left;
else {ptr->left=temp; break;}
}
else{
if(ptr->right) ptr=ptr->right;
else {ptr->right=temp; break;}
}
}//while loop ends here so that i get the ptr to be
}
}
Вы можете попробовать что-то вроде:
function synch()
{
var done = false;
var returnVal = undefined;
// asynch takes a callback method
// that is called when done
asynch(function(data) {
returnVal = data;
done = true;
});
while (done == false) {};
return returnVal;
}
Но это может заморозить ваш браузер на время асинхронного метода ...
Или взгляните на Narrative JavaScript: Narrative JavaScript - это небольшое расширение языка JavaScript, которое позволяет блокировать асинхронные обратные вызовы событий. Это делает асинхронный код легко читаемым и понятным.
http://neilmix.com/narrativejs/doc/index.html
Майк
если Вы используете Ajax jQuery: $ .ajax ()
можно установить атрибут асинхронных ко лжи, и затем у Вас будет синхронизация ajax, запрашивают к серверу.
Мы используем RPC GWT, который также имеет асинхронный API. Решением, которое мы в настоящее время используем для совершения нескольких асинхронных вызовов в сериале, является объединение в цепочку вызова:
callA(function(resultA) {
callB(resultA, function(resultB) {
callC(); //etc.
});
});
Этот вложенный подход достигает того, что Вы хотите, но это является подробным и твердым читать для вновь прибывших. Один из подходов, которые мы исследовали, добавляет вызовы, которые мы должны выполнить к стеку и выполнению их в порядке:
callStack = [
callA(),
callB(),
callC()
];
callStack.execute();
Тогда стек вызовов справился бы:
Однако, потому что Java не имеет ссылок на функцию, каждый запрос к стеку вызовов потребовал бы анонимного класса, таким образом, мы не дошли до такого решения. Однако можно иметь больше успеха в JavaScript.
Удачи!
Я не уверен, что это правильное место, но я здесь, ища ответы на синхронные звонки в Firefox. решение было бы удалить обратный вызов onreadystatechange и сделать прямой вызов. Это то, что я нашел, и мое решение синхронный обратный вызов со службой отдыха
Извините, JavaScript не обеспечивает примитивы языка (например, потоки или сопрограммы), чтобы заставить асинхронные вещи действовать синхронно или наоборот.
Вы обычно* получаете один поток выполнения только, таким образом, Вы не можете получить обратный вызов от таймера или XMLHttpRequest readystatechange, пока стопка продвижения вызовов к созданию запроса полностью не распутала.
Так короче говоря, Вы не можете действительно сделать этого; подход с вложенными закрытиями на странице WebKit, которую Вы связали, является единственным способом, которым я знаю о сделать код читаемым в этой ситуации.
*: кроме некоторых неясных ситуаций, которые не помогли бы Вам и обычно считаются ошибками