2016-06-09 5 views
0

В настоящее время мы используем базу данных SAP HANA. Чтобы получить данные, мы будем использовать Node.JS-API, который мы будем называть через AJAX, чтобы получить преимущества async. Итак, вот в чем проблема:Asynchronous Lazy Loading

У нас есть много страниц, где нам нужны одни и те же данные (например, данные клиента). Для этого я хотел создать библиотеку, которая выполняет фактические вызовы данных, так что мне просто нужно позвонить db.getCustomer([ID]). Чтобы получить возвращаемое значение от AJAX, я должен установить async: false в вызове AJAX.

Вопрос теперь в том, можно ли асинхронно создавать библиотеку данных? Является ли хорошей практикой инкапсулировать привязку данных (используя так называемый DAO)? Я немного смущен, потому что другой разработчик сказал мне просто использовать один и тот же вызов AJAX снова и снова, чтобы не потерять асинхронный режим, и в любом случае это лучшая практика.

Вот мой фактический AJAX-вызов в качестве примера:

getCustomer: function(CID) { 
      var aUrl = 'http://example.com/api/customer/' + CID, 
       returnData 
      ; 
      jQuery.ajax({ 
       url: aUrl, 
       method: 'GET', 
       dataType: 'json', 
       contentType: "application/json", 
       async: false, 
       success: function(data) { 
        returnData = data; 
       } 
      }); 
      return returnData; 
     }, 

// other ajax calls 
// to get the data via 1-liner 

спасибо за разъяснение!

ответ

0

На самом деле, нет смысла возвращать данные из обратного вызова в синхронной функции; как правило, вы сохранили бы возвращенные данные обратного вызова в свою модель, чтобы ваш просмотр/контроллер автоматически обновлялся.

Если вам действительно нужен ваш метод возвращают данные асинхронных, посмотри на Deferred или Обещания

+0

поэтому решение здесь может быть создание самой модели в моей функции библиотеки (или, как вы упомянули, используя обещания) ? – corax228

+0

Если ваша цель - создать библиотеку функций, я бы решил, чтобы ваши методы вернули обещание (разрешить или отклонить) – Qualiture

+1

спасибо! после некоторого исследования он работает просто супер отлично :) return $ .ajax ({...}); а затем -> getCustomer (CID) .then() или .success() решает теперь все мои проблемы! – corax228