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.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage