2016-10-25 2 views
3

Как я могу документировать возвращенный результат JSON запроса на сервер?Как документировать возвращенные данные в JsDoc

Пример

/** 
* Gets a user's data 
* @returns {jQuery} 
*/ 
function getUserData(userId){ 
    return $.get('/usr/' + userId); 
} 

В приведенном выше примере возвращаемые данные будут являться объектом JSON, такие как

{ 
    "name" : "Bob", 
    "status" : 2 
} 
+0

* "В приведенном выше примере возвращаемые данные будут объектом JSON, например" * Нет, это не будет. '$ .get' является синхронным.Он фактически возвращает объект 'jqXHR'. Также объект JavaScript не JSON. –

+0

Да, я знаю. Это вопрос моего вопроса и почему он говорит: «возвращает jQuery». Я хотел бы предоставить данные, которые могут быть возвращены с этим результатом, если есть стандартный способ, но я не могу найти его в примерах jsdoc. – BarryBones41

ответ

2
/** 
* Gets a user's data request 
* @return {jQuery.jqXHR} 
*/ 
function getUserData(userId){ 
    return $.getJSON('/usr/' + userId); 
} 

/* 
* Handles the result of a user data request. 
* @param {Object} data The JSON object, already converted to an Object. 
*/ 
function doSomethingWithUserData(data) { 
    console.log('do something with user data:', data); 
} 

getUserData(userId).done(handleUserData); 

Как Феликса указывает, возвращаемое значение не JSON, это даже не объект.

Адрес JQuery's types documentation:

По JQuery 1.5, метод $ .ajax() возвращает объект jqXHR, который является подмножеством объекта XMLHTTPRequest. Для получения дополнительной информации смотрите раздел jqXHR в $ .ajax записи

С $.get и $.getJSON оба Shorthands для $.ajax, то же самое.

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

Я также преобразовал $.get в $.getJSON, который сделает вызов JSON.parse для вас (который преобразует ответ от строки в объект). Обработчик $.get возьмет вместо этого @param {string}.

Update

В замечании ОП вопрос, как справиться с этим с помощью пользовательских данных, так что будущее DEV будет знать, что ожидать в вызове.

Теперь, когда у нас есть данные, давайте рассмотрим его документирование.

Существует 3 эффективных решения для документации, в зависимости от сложности, и если у вас есть инициализация.

Простейшим было бы создание @typedef с использованием @property для описания свойств, это не требует дополнительного кода и является чисто документацией.

goog.provide('UserData'); 
/* 
* UserData (in the style of Closure's JSDocs) 
* @typedef {{ 
* name: {string}, 
* title: {string} 
* }} 
*/ 
UserData; 

или

/* 
* UserData (in the style of useJSDocs) 
* @typedef {Object} 
* @property {string} name 
* @property {string} title 
*/ 
var UserData; 

в использовании:

/* 
* Handles the result of a user data request. 
* @param {UserData} data The JSON object, already converted to an Object, 
* cast to UserData 
*/ 
function doSomethingWithUserData(data) { 
    console.log('do something with user data:', data); 
} 

И @interface @record, который подобен и может быть более полезным для вас.

Наконец-то есть класс вверх, где вы бы let user = new UserData(jsonUser), если вы можете собрать более нескольких строк настройки/инициализации по умолчанию и поместить его в класс, так я предлагаю идти.

+0

Вот моя ситуация, может быть, мне нужно очистить режим: Предположим, что в файле есть 100 функций getFromServer, как 'getUserData'. Как новый разработчик узнает, что будет возвращено из каждого запроса ajax? Что делать, если у них нет доступа к серверному коду? – BarryBones41

+0

Hmm .. каждый ответ как класс. Полагаю, это может сработать. В вашем примере, как вы можете писать 'UserData' без нарушения скрипта? – BarryBones41

+0

@ BarryBones41 Извините, я обновил примеры для включения объявлений. Я так привык к goog.provide, что я полностью пропустил это при написании ответа, поэтому я включил пример goog.provide. –

Смежные вопросы