Обработка вызовов обещания AJAX

У меня есть обещание Ember, как показано ниже;

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
    });
})

Мой вопрос заключается в том, могу ли я использовать общий код для $.ajax(), но иметь другую реализацию для обратного вызова done(). Я могу проверить это, передав некоторый параметр из вызывающего места.

так что в основном я хочу

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

2 ответа

Вы в настоящее время передаете функцию done путем жесткого кодирования выражения функции в него.

Замените это переменной. Передайте значение этой переменной в качестве аргумента функции.

В качестве альтернативы не используйте done здесь вообще. Просто верните возвращаемое значение $.ajax() и позвонить done() на что в вызывающей функции.

Вернуть обещание вместо вызова ajax. И оберните призыв Аякса в обещание.

Проверьте код ниже. Это может помочь.

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
    });
}
Другие вопросы по тегам