2016-11-16 2 views
1

Я хотел бы знать, как лучше всего позвонить или связать мои методы ПОСЛЕ того, как мои данные были возвращены.Как цепочка нескольких методов в AngularJs после возврата данных

То, как я это вижу (и я могу быть совершенно неправым, поэтому я задаю вопрос!), Заключается в том, что выполняется «тяжелое подъемное»/«длинное ожидание» извлечения данных, и тогда можно было бы назовите различные методы asynchronously, предположите, что методы выполняют работу synchronously.

Я не прав?

Вот пример метода я использую для обработки моего возвращающего данные:

function formatDataAccordingToLocation(data) { 
    if (mediaSourceGraphChange) { 
     mediaSourceGraphConfig(); 
     populateMediaSourceData(data.channels_data); 
     mediaSourceGraphChange = false; 
    } 
    else if (sentimentGraphChange) { 
     sentimentGraphConfig(); 
     populateSentimentData(data); 
     sentimentGraphChange = false; 
    } 
    else if (hashtagsGraphChange) { 
     hashtagsGraphConfig(); 
     populateHashtagsData(data); 
     hashtagsGraphChange = false; 
    } 
    else { 
     $scope.totalMentions = data.mentions_count; 
     populateSummaryData(data); 
     volumeGraphConfig(); 
     populateVolumeData(data.timeline_data, data.time_trend); 
     populateHashtagsData(data); 
    } 
} 
+0

Вам не нужны обратные вызовы? https://developer.mozilla.org/en-US/docs/Mozilla/js-ctypes/Using_js-ctypes/Declaring_and_Using_Callbacks –

+0

Привет. Нет, никаких обратных вызовов не требуется. Каждая функция использует возвращаемые данные для изменения моего представления и $ scope. Это простые функции, назначение данных и т. Д. – onmyway

ответ

1

Как я вижу (и я мог бы быть совершенно неправильно, поэтому я прошу вопрос!), Является то, что «тяжелая атлетика»/«долго ждать» из выборки делается данные, и тогда можно было бы асинхронно вызвать различные методы , приложить к тому, чтобы методы выполняли работу синхронно.

Например здесь:

if (mediaSourceGraphChange) { 
     mediaSourceGraphConfig(); 
     populateMediaSourceData(data.channels_data); 
     mediaSourceGraphChange = false; 
    } 

Если не зависимости между функциями, как сказал @tom Джонсон, я думаю, что еще один хороший хороший повод называть mediaSourceGraphConfig() или populateMediaSourceData() в асинхронно путь будет, если эти методы могут принимать какое-то истекшее время для возврата и что вы не хотите блокировать браузер/пользователя в это истекшее время.

+0

Спасибо - это имеет смысл. :) – onmyway

1

Я рекомендую использовать угловые $ Q обслуживание в своих методах, чтобы использовать эту функцию вы можете;

var mediaSourceGraphConfig = function(){ 
    var deferred = $q.defer(); 
    //logic 
    return deferred.resolve(); 
} 

Для каждой функции, которую вы хотите вызвать асинхронно, а затем в своей основной функции вы можете;

function formatDataAccordingToLocation(data) { 
    mediaSourceGraphConfig().then(populateMediaSourceData(variable)); 
} 

Вы также можете использовать deferred.reject, если ваша функция возвращает неверные данные.

Более подробная информации о $ д here

Надеется, что это помогает!

+0

Спасибо за ответ и помощь. Дело в том; мои данные уже вернулись с использованием $ q. Мой вопрос касается модификации возвращаемых данных и необходимо ли тогда использовать цепочку $ q и методов и т. Д. Или я могу просто вызвать одну функцию после другой в соответствии с моим примером? – onmyway

+1

Насколько я понимаю, это зависит от того, зависят ли функции друг от друга, поэтому, если функция 2 требует какого-либо ответа или изменения, внесенных в функцию 1, я бы рекомендовал их связать, особенно если они обрабатывают HTTP-запросы, потому что угловым нравится перемещаться из функция, чтобы оставлять ожидающие запросы http открытыми. В противном случае, если функции независимы друг от друга, тогда ваш путь будет работать нормально. –

+0

Функции не зависят друг от друга, чтобы возвращать любые значения или данные. Спасибо за помощь! – onmyway