Шаблон для обертывания Асинхронного JavaScript функционирует для создания этого синхронным

Вы никогда не пишете в своем дереве, только в локальном 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         
    }
}
16
задан pfeilbr 18 October 2008 в 03:28
поделиться

5 ответов

Вы можете попробовать что-то вроде:

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

Майк

4
ответ дан 30 November 2019 в 21:46
поделиться

если Вы используете Ajax jQuery: $ .ajax ()

можно установить атрибут асинхронных ко лжи, и затем у Вас будет синхронизация ajax, запрашивают к серверу.

1
ответ дан 30 November 2019 в 21:46
поделиться

Мы используем RPC GWT, который также имеет асинхронный API. Решением, которое мы в настоящее время используем для совершения нескольких асинхронных вызовов в сериале, является объединение в цепочку вызова:

callA(function(resultA) {
    callB(resultA, function(resultB) {
        callC(); //etc.
    });
});

Этот вложенный подход достигает того, что Вы хотите, но это является подробным и твердым читать для вновь прибывших. Один из подходов, которые мы исследовали, добавляет вызовы, которые мы должны выполнить к стеку и выполнению их в порядке:

callStack = [
    callA(),
    callB(),
    callC()
];

callStack.execute();

Тогда стек вызовов справился бы:

  1. Вызов вызовов в последовательном (т.е. проводное соединение в первом примере)
  2. Передача результата одного вызова передают следующему.

Однако, потому что Java не имеет ссылок на функцию, каждый запрос к стеку вызовов потребовал бы анонимного класса, таким образом, мы не дошли до такого решения. Однако можно иметь больше успеха в JavaScript.

Удачи!

1
ответ дан 30 November 2019 в 21:46
поделиться

Я не уверен, что это правильное место, но я здесь, ища ответы на синхронные звонки в Firefox. решение было бы удалить обратный вызов onreadystatechange и сделать прямой вызов. Это то, что я нашел, и мое решение синхронный обратный вызов со службой отдыха

0
ответ дан 30 November 2019 в 21:46
поделиться

Извините, JavaScript не обеспечивает примитивы языка (например, потоки или сопрограммы), чтобы заставить асинхронные вещи действовать синхронно или наоборот.

Вы обычно* получаете один поток выполнения только, таким образом, Вы не можете получить обратный вызов от таймера или XMLHttpRequest readystatechange, пока стопка продвижения вызовов к созданию запроса полностью не распутала.

Так короче говоря, Вы не можете действительно сделать этого; подход с вложенными закрытиями на странице WebKit, которую Вы связали, является единственным способом, которым я знаю о сделать код читаемым в этой ситуации.

*: кроме некоторых неясных ситуаций, которые не помогли бы Вам и обычно считаются ошибками

10
ответ дан 30 November 2019 в 21:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: