Wie man jQuery $ .ajax-Aufrufe an Bluebird-Versprechen ohne das verzögerte Anit-Pattern überträgt
Im Moment benutze ich promise.deferred in einer Core-Datei. Dadurch kann ich Versprechungen an zentraler Stelle einlösen. Ich habe gelesen, dass ich möglicherweise ein Anti-Pattern verwende und ich möchte verstehen, warum es schlecht ist.
so in meinemcore.js Datei Ich habe Funktionen wie diese:
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;
}
Und dann in meinemgetLocation.js Datei habe ich folgende:
var core = require('core');
var location = core.getMyLocation('Petersburg')
.then(function(response) {
// do something with data
}).catch(throw error);
Nachdem ich die Bluebird-Dokumente und viele Blog-Posts über das verzögerte Anti-Pattern gelesen habe, frage ich mich, ob dieses Pattern praktisch ist. Ich könnte dies folgendermaßen ändern:
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();
});
Ich schätze, ich bin verwirrt darüber, wie man eine zentrale Bibliothek am besten einrichten kann, die XHR-Anfragen mit jquery für die Anrufe, aber Bluebird für die Versprechungen verarbeitet.