Несколько асинхронных вызовов для заполнения объекта - PullRequest
0 голосов
/ 29 августа 2010

Я занимаюсь разработкой приложения Flex и у меня возникли проблемы с работой с асинхронными вызовами. Вот что я хотел бы сделать :

[Bindable] var fooTypes : ArrayCollection();

for each (var fooType : FooType in getFooTypes()) {
    fooType.fooCount = getFooCountForType(fooType);
    itemTypes.addItem(fooType);
}

Проблема, с которой я сталкиваюсь, заключается в том, что getFooTypes и getFooCountForType являются асинхронными вызовами веб-службы. Я понимаю, как заполнять типы fooTypes, устанавливая Responder и используя ResultEvent, но как я могу вызвать другую службу, используя результат? Есть ли какие-либо предложения / шаблоны / рамки для обработки этого?

1 Ответ

2 голосов
/ 29 августа 2010

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

Но, если вы не считаете, что это возможно или практично по какой-либо причине, я быРекомендую сделать какой-нибудь тип удаленной цепочки вызовов.

Добавьте все «удаленные вызовы», которые вы хотите сделать в массиве.Позвони первому.В обработчике результатов обработайте результаты, а затем вытолкните следующий и вызовите его.

Мне немного непонятно из вашего примера кода, когда вы вызываете удаленный вызов, но я предполагаю, что это часть метода getFooCountForType.Концептуально я бы сделал что-то вроде этого.Определите массив вызовов:

public var callsToMake : Array = new Array();

кешируйте текущий процесс:

public var fooType : FooType;

Выполните цикл и сохраните результаты:

for each (var fooType : FooType in getFooTypes()) {
    callsToMake.push(fooType);
    // based on your code sample I'm unclear if adding the fooTypes to itemTypes is best done here or in the result handler
    itemTypes.addItem(fooType);
}

Затем вызовите удаленный обработчик и сохраните обрабатываемый файл:

fooType = callsToMake.pop();   
getFooCountForType(fooTypeToProcess);

В обработчике результатов сделайте что-то вроде этого:

// process results, possibly by setting 
fooType.fooCount = results.someResult;

и снова вызовите удаленный метод:

fooType = callsToMake.pop();   
getFooCountForType(fooTypeToProcess);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...