Обработка вызовов обещания 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
});
}