Каков наиболее краткий способ использования отложенного канала jQuery?

Я разрабатываю javascript API, который оборачивает мой REST API. Обычно я хочу избежать множества многословных и запутанных вложенных обратных вызовов и читал о достоинствах отложенного jQuery.

Давайте представим мою библиотеку myLib, которая представляет объекты-люди и способы перемещения между объектами-людьми. У него есть множество методов, таких как «папа», «босс», «помощник» и т. Д., Которым необходимо выполнить запрос ajax, чтобы найти некоторые данные и вернуть другой связанный объект «люди». Но я хочу, чтобы они вернули отложенный объект, у которого также есть методы myLib, которые я могу связать вместе, чтобы написать действительно краткий простой код, подобный этому:


 myLib('me').dad().boss().assistant(function(obj){
   alert(obj.phone); // My dad's, bosses assistants phone number
 }, function(){
   alert('No such luck);
 });

Это создает объект «я», а затем выполняет первый вызов ajax, чтобы найти мои details, затем использует эти данные, чтобы сделать еще один вызов, чтобы узнать моего родителя, затем снова, чтобы найти моего босса, затем еще один, чтобы получить помощника, и затем, наконец, это передается моему обратному вызову, и я обрабатываю его. Вроде как связанные методы обхода jQuery, но асинхронные.

Передача функции в любой момент, но обычно последний метод, вызывается изнутри при разрешении последнего отложенного объекта в цепочке. Вторая функция - это обратный вызов отказа, и она вызывается, если какой-либо из отложенных объектов в цепочке отклоняется.

Я думаю, мне нужно создать отложенный объект jQuery, а затем расширить его, но не уверен, что это «лучший» способ.

Итак, каков наилучший способ достижения моей минималистской цели API? По сути, я хочу, чтобы все имена методов находились на 100% в пространстве имен проблем домена и не были загрязнены множеством фраз «когда», «готово», «успех» и т. Д.

И есть ли примеры аналогичных чистых API, которые я могу эмулировать где-нибудь?

5
задан Brendan Heywood 22 October 2011 в 14:11
поделиться