Я разрабатываю API javascript, который обертывает мой REST API. Обычно я хочу избежать большого количества подробных и запутанных вложенных обратных вызовов и читал о достоинствах Deferred 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, чтобы найти мои данные, затем использует эти данные для выполнения другого вызова, чтобы узнать моего родителя, затем снова, чтобы найти моего босса, затем еще один, чтобы получить помощника, а затем наконец, это передается моему обратному вызову, и я обрабатываю его. Вроде как цепные методы обхода jQuery, но асинхронные.
Передача функции в любой точке, но обычно в последнем методе, будет вызываться внутренне, когда разрешается последний объект Deferred в цепочке. Вторая функция — это обратный вызов отказа, который вызывается, если какой-либо из отложенных объектов в цепочке отклонен.
Я думаю, мне нужно создать отложенный объект jQuery, а затем расширить его, но не уверен, что это «лучший» способ.
Итак, каков наилучший способ достижения моей минималистской цели API? В основном я хочу, чтобы все имена методов были на 100% в пространстве имен проблем домена и не были загрязнены множеством «когда», «сделано», «успех» и т. д.
И есть ли примеры подобных чистых API, которые я могу где-то эмулировать?