Я относительно новичок в js, поэтому, пожалуйста, прости меня, если моя формулировка не совсем верна. Я также создал jsfiddle , чтобы продемонстрировать проблему.
Обзор
В приложении, над которым я работаю, у меня есть функция с вызовом jquery ajax, например:
function scenario1(ajaxCfg) {
return $.ajax(ajaxCfg)
}
Я хочу изменить эту функцию, но без изменения входов или выходов (так как эта функция вызывается сотни раз в моем приложение).
Изменение заключается в том, чтобы сделать другой вызов ajax, ПОТОМ сделать указанный вызов. В настоящее время у меня написано так:
function callDependency() { //example dependency
return $.ajax(depUri)
}
function scenario2(ajaxCfg) {
return callDependency().then(() => $.ajax(ajaxCfg))
}
Желаемый результат
Я хочу, чтобы эти два возвращаемых объекта были идентичны:
let result1 = scenario1(exampleCall)
let result2 = scenario2(exampleCall)
В частности, я хочу, чтобы result2
возвращал объект того же типа, что и result1
.
Фактический результат
result1
является (очевидно) результатом вызов ajax, который является jqXHR
объектом , который реализует интерфейс обещания и разрешается в то же значение, что и result2
, что является стандартным обещанием.
, начиная с result2
не является jqXHR
объектом, result2.error()
не определено, в то время как result1.error()
определено.
Я попытался смоделировать эти методы (просто добавив функцию .error
к возвращаемому результату, для пример), но, к сожалению, даже при этом определяется result1.done().error
, в то время как result2.done().error
равно undefined
.
Оборачивает (или разворачивает) его
В Короче говоря, я хочу вернуть jqXHR
результат лямбда-функции .then()
в scenario2
как результат функции scenario2
. В псевдокоде я хочу:
function scenario2(ajaxCfg) {
return callDependency().then(() => $.ajax(ajaxCfg)).unwrapThen()
} //return jqXHR