В настоящее время я использую функцию prom.deferred в основном файле. Это позволяет мне разрешать promises в центральном месте. Я читал, что я могу использовать анти-шаблон, и я хочу понять, почему это плохо.
поэтому в моем файле core.js у меня есть следующие функции:
var getMyLocation = function(location) {
var promiseResolver = Promise.defer();
$.get('some/rest/api/' + location)
.then(function(reponse) {
promiseResolver.resolve(response);
)}
.catch(function(error) {
promiseResolver.reject(error);
});
return promiseResolver.promise;
}
И затем в моем файле getLocation.js у меня есть следующее:
var core = require('core');
var location = core.getMyLocation('Petersburg')
.then(function(response) {
// do something with data
}).catch(throw error);
После прочтения документов Bluebird и многих сообщений в блоге об отложенном анти-шаблоне я задаюсь вопросом, является ли этот шаблон практичным. Я мог бы изменить это на следующее:
core.js
var getMyLocation = function(location) {
var jqXHR = $.get('some/rest/api/' + location);
return Promise.resolve(jqXHR)
.catch(TimeoutError, CancellationError, function(e) {
jqXHR.abort();
// Don't swallow it
throw e;
});
getLocation.js
var location = core.getMyLocation('Petersburg')
.then(function(response) {
// do something
})
.catch(function(error) {
throw new Error();
});
Я думаю, я смущен тем, что лучший способ иметь центральную библиотеку, которая обрабатывает запросы xhr с использованием jquery для вызовов, но Bluebird для promises.