Tengo una función, que usa webix.ajax( )
para realizar llamadas AJAX.
En webix
, AJAX tiene la funcionalidad de no gestionar los timeout; no los considera un error, sino que los trata como si la llamada hubiera sido exitosa.
Para remediarlo, creé esta función:
function timedAjax( timeout, callback, method, url, args ) {
if( 'call' in timeout ) {
args = url;
url = method;
method = callback;
callback = timeout;
timeout = 10000;
}
if( args )
( webix.ajax( ).timeout( timeout )[method] )( url, args, { success: ResponseOk, error: ResponseError } );
else
( webix.ajax( ).timeout( timeout )[method] )( url, undefined, { success: ResponseOk, error: ResponseError } );
function ResponseError( text, data, xhr ) {
var err;
setTimeout( function( ) { callback( xhr.status === 0 ? true : false, text, data, xhr ) }, 0 );
}
function ResponseOk( text, data, xhr ) {
setTimeout( function( ) { callback( false, text, data, xhr ); }, 0 );
}
}
El código funciona correctamente; si no se pasa un argumento timeout
, establece un valor por defecto de 10000
ms, realiza la llamada a webix.ajax( )
correspondiente, y llama a la función callback
con los argumentos correctos:
- Si no hay error, la llama como
callback( false, text, data, xhr )
- Si hay error, incluyendo timeout, la llama como
callback( true, text, data, xhr )
Ahora, estoy intentando modernizar ese código. He encontrado mucha documentación sobre como usar las promesas, pero no termino de aclararme al respecto.
webix
tiene compatiblidad con Promises/A+
. La propia llamada a webix.ajax( )
devuelve una promise con la funcionalidad indicada: si hay timeout, lo toma como reusultado exitoso.
¿ Como transformo el código anterior para que devuelva una promise ?