Цепочка асинхронных методов в JavaScript

Я хотел бы сделать что-то вроде этого:

var res = myAjax.post();

myAjax - это моя собственная оболочка ajax (асинхронная). Мне не нужна цепочка, но я хотел бы иметь возможность делать вызов, как показано выше. Я бы хотел, чтобы обратный вызов обрабатывался самим объектом. Я читал об асинхронных очередях методов, но, честно говоря, не мог полностью понять это. Я знаю, что мог бы использовать синхронный вызов ajax, но это должно быть возможно сделать и асинхронно, если я правильно понимаю. Любая помощь очень ценится. Спасибо.


person Marius    schedule 11.08.2010    source источник
comment
Ваш вопрос не имеет большого смысла. Вы описываете синхронную схему, но говорите, что хотите, чтобы вызов был асинхронным. Может быть только одно или другое.   -  person Pointy    schedule 11.08.2010
comment
Должна быть возможность сделать это и асинхронно, если я правильно понимаю --› Вы не понимаете.   -  person Tomalak    schedule 11.08.2010
comment
JQuery делает это, поэтому это должно быть возможно. Прочтите это, если считаете, что это невозможно: dustindiaz.com/async-method-queues Проблема с этой статьей в том, что я не до конца ее понимаю...   -  person Marius    schedule 11.08.2010
comment
@Marius: Эта статья о цепочке функций, а не о присвоении значения.   -  person Tomalak    schedule 11.08.2010
comment
О... Значит, они все равно запускаются асинхронно и возвращаются сразу?   -  person Marius    schedule 11.08.2010
comment
Блин... Так вот что показалось не так. Спасибо за объяснение.   -  person Marius    schedule 11.08.2010
comment
@Marius: весь смысл асинхронности заключается в немедленном возврате, а не в ожидании завершения операции. ;-) Таким образом, присвоение значения должно произойти, когда оператор завершится (например, в обработчике события onSuccess).   -  person Tomalak    schedule 11.08.2010
comment
@Tomalak: я прекрасно это понимаю. Но меня обманул мой не очень совершенный английский, когда я прочитал эту статью и подумал, что это действительно возможно;] Думаю, мне придется искать способ написать вызов ajax с как можно меньшим количеством кода.   -  person Marius    schedule 11.08.2010
comment
@Marius, взгляните на этот вопрос, я понимаю, что вы пытаетесь сделать, реализовав плавный интерфейс, чтобы скрыть асинхронный характер запросов Ajax...   -  person Christian C. Salvadó    schedule 11.08.2010


Ответы (1)


Я сделал демонстрацию здесь, которая может быть чем-то вроде того, что вы имеете в виду...

В этой демонстрации есть два типа объектов: MyAjax, который имеет метод «post», как указано выше, и объект MyRes с методом getData, который будет возвращать null до тех пор, пока асинхронный вызов не будет успешно завершен. После завершения он вернет данные, полученные из вызова ajax.

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

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

person sje397    schedule 11.08.2010
comment
Спасибо за демонстрацию. Вероятно, есть несколько способов сделать это, но я думаю, что это все же не то же самое. Чтобы ответить на ваш вопрос, я просто хочу уменьшить количество кода, необходимого для написания вызова ajax - вот и все. Многие обратные вызовы просто загромождают код, поэтому я подумал, что могу немного его почистить. - person Marius; 11.08.2010