copenndthagen
copenndthagen

Reputation: 50732

AJAX promise call handling

I have an Ember promise call as below;

var promise = new Ember.RSVP.Promise(function(resolve, reject) {
    return $.ajax({
    //want this common
        url: requestUrl,
        type: type, // HTTP method
        dataType: dataType, // type of data expected from the API response
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify(postData)
    })
    .done(function(data, status, xhrObject) {
    //But want this to be different
      // resolve call
    })
    .fail(function(xhrObject, status, error){
      // reject call
    });
})

My question is can I use common code for $.ajax(), but have different implementation for done() callback I can check that by passing some parameter from the calling place.

so basically, I want

if (someparam == 'handleDone1')
    call resolve(data)
else
    call resolve({data})

Upvotes: 0

Views: 200

Answers (2)

Abu Hanifa
Abu Hanifa

Reputation: 3047

return a promise instead of ajax call. And wrap the ajax call into promise.

checkout the below code. It may helps.

function someFunction(resolve1, reject1) {
  return new Ember.RSVP.Promise(function(resolve, reject) {
    $.ajax({
    //want this common
        url: requestUrl,
        type: type, // HTTP method
        dataType: dataType, // type of data expected from the API response
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify(postData)
    })
    .done(function(data, status, xhrObject) {
      //But want this to be different
      // resolve call
      var dicision = resolve1();
      if(dicision){
        resolve(data);
      } else {
        resolve({data});
      }
    })
    .fail(function(xhrObject, status, error){
      // reject call
    });
}

Upvotes: 0

Quentin
Quentin

Reputation: 943157

You are currently passing a function to done by hard coding a function expression into it.

Replace that with a variable. Pass a value to that variable as a function argument.

Alternatively, don't use done here at all. Just return the return value of $.ajax() and call done() on that in the calling function.

Upvotes: 1

Related Questions