Como lançar chamadas jQuery $ .ajax para promessas do Bluebird sem o padrão anit adiado
No momento, uso promessa.deferida em um arquivo principal. Isso me permite resolver promessas em um local central. Eu tenho lido que posso estar usando um anti-padrão e quero entender por que isso é ruim.
então na minhacore.js arquivo eu tenho funções como esta:
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;
}
E então na minhagetLocation.js arquivo Eu tenho o seguinte:
var core = require('core');
var location = core.getMyLocation('Petersburg')
.then(function(response) {
// do something with data
}).catch(throw error);
Depois de ler os documentos do Bluebird e muitas postagens no blog sobre o antipadrão diferido, pergunto-me se esse padrão é prático. Eu poderia mudar isso para o seguinte:
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();
});
Acho que estou confuso com a melhor maneira de ter uma biblioteca central que lide com solicitações xhr usando jquery para as chamadas, mas Bluebird para as promessas.