2014-08-28 3 views
1

У меня есть цикл while, внутри которого я вызываю отложенный метод, и обычный метод возвращает значение. Проблема заключается в том, что цикл while продолжается с каждой итерацией, а возвращаемое значение от отложенного метода и обычных методов не является последовательным. некоторые возвращаемые значения отложенного метода опаздывают. Как сделать цикл while ждать, пока отложенный метод вернет значение.Отложенный метод внутри цикла while

Пожалуйста, дайте мне решение, застрявшее в этом в течение нескольких дней.

Обновление: псевдо-код

while(!stopProcess){ 
     var pageno=findpageno(param); 
     findPageNoRecursively.done(pagenum){ 
       pageno=pagenum; 
      } 
     return pageno; 
} 

Любая помощь будет высоко оценен

+0

Пожалуйста, предоставьте ваш код. – Regent

+0

, если цикл while имеет некоторые асинхронные операции, тогда вы не можете этого сделать ... вам нужно поделиться своим кодом, чтобы мы предложили любое решение. –

+2

Ваш псевдокод ошибочен. Вы присваиваете результат 'findpageno()' '' pageno' переменной, определенной на каждой итерации. После этого вы назначаете обработчик завершенным и используете одно и то же имя переменной в этом обработчике (т. Е. Вы скрываете ранее определенную переменную pageno. Это определенно ошибка. И ваш отложенный также создается в этом цикле, или вы назначая обработчикам один и тот же? Попробуйте разбить свой код на небольшие функции с одной ответственностью и дать лучшее объяснение проблемы. –

ответ

0

Там нет никакого способа изменить асинхронный метод синхронизирован, потому что (по причинам, которые не совсем понятно, для меня) Javascript Безразлично 't обеспечить доступ к обработке цикла событий.

В других средах программирования на основе событий вы можете написать «вложенный цикл событий», в котором вы можете дождаться завершения операции при обработке событий. Это невозможно в Javascript, и ваш код всегда запрашивается, чтобы завершить цикл цикла, который скрыт.

Это причина, по которой, например, в node.js предусмотрены варианты «Sync» для методов: в Javascript невозможно записать версию Sync, учитывая только асинхронную, поскольку нет синхронного ожидающего примитива.

+1

Я не думаю, что разглагольствование о том, что JS может или не может сделать, полезно. Кроме того, OP, похоже, запутался в том, как работает асинхронное программирование в JS и о том, чего он пытается добиться в первую очередь. Его вопрос ясно указывает на непонимание с его стороны, это вовсе не указывает на то, что он нашел дефект в языке. – Tomalak

+0

@ Томалак: Шахта - это не напыщенная речь. Я просто заметил, что концепция «вложенных циклов событий» отсутствует в Javascript, и это имеет последствия, одна из которых делает невозможным преобразование асинхронной функции в синхронную форму (что, по-видимому, казалось мне OP). Конечно, это не просто непреднамеренно, но я не знаю причин для этого выбора (хотя я никогда не исследовал их). – 6502

+0

Ладно, а не напыщенная речь. :) Я просто хотел дать некоторый противовес, чтобы ОП, когда он читал ваш ответ, не чувствовал, что то, чего он хочет, не может быть сделано. Он хочет не того, что есть, и все. – Tomalak

Смежные вопросы