Синхронный собственный процесс в AIR с использованием JavaScript

#javascript #asynchronous #air

#javascript #асинхронный #air

Вопрос:

Я создаю приложение в AIR с использованием JavaScript. Для многих моих функций требуется текст, возвращаемый собственным процессом. Но собственный процесс в AIR выдает значения асинхронно, вызывая функцию при событии STANDARD_OUTPUT_DATA. Есть ли какой-либо способ получить это значение синхронно, например, ожидание функции до завершения ее выполнения.

Вот пример кода :

    var textReceived;

   function callbackFunction()
   {
       textReceived= getTextfromProcess(); 
   }

   function chkProc()
   {
        process.addEventListener(STANDARD_OUTPUT_DATA, callbackFunction);
          //This is AIR's function which give text asynchronously 
   }
   function sqlExc(sql)
   {

   chkProc();
       //wait here before returning
   return   textReceived;
   }
  

Поскольку JavaScript выполняется в одном потоке, я не могу использовать бесконечный цикл с break.
Есть ли какой-либо способ добиться этого?

Ответ №1:

NativeProcess не имеет блокирующих (синхронных) методов. Кстати, бесконечный цикл здесь не поможет — чтобы позволить среде выполнения обрабатывать события, клиентский код должен завершить все функции. Только после завершения клиентского кода в текущем фрейме среда выполнения обменивается данными с собственным процессом (и сетью, и всем остальным).)

Комментарии:

1. «Только после завершения клиентского кода в текущем фрейме», что это значит, поскольку я не использую никаких фреймов?

2. Нет, не кадры movieclip. Проигрыватель сам отрисовывает картинку кадр за кадром. Вы знакомы с концепцией «Flash elastic racetrack»? Если нет, погуглите — это обязательная вещь для разработчика Flash.

3. На самом деле в AIR вы можете написать приложение, используя JavaScript или action-script. Поскольку я знаком только с JavaScript, я пишу приложение на нем. И я уже упоминал об этом в вопросе. И теперь я преобразовал все приложение в асинхронную модель, поскольку я не могу найти никакого способа сделать это в JavaScript. Спасибо за вашу помощь

4. Elastic racetrack применим и к приложениям JS AIR. По сути, системный код не выполняется до тех пор, пока клиентский код не завершит работу со всеми прослушивателями событий, бесконечный цикл приведет только к зависанию приложения. У вас просто нет выбора, кроме как использовать асинхронную модель.