when then example await async javascript jquery jquery-deferred

javascript - then - observable jquery



Cadena mĂșltiple "entonces" en jQuery.when (1)

Use una función anónima dentro de .then y pase los parámetros que desea pasar. Estoy reemplazando a .then con .done porque no necesitas .then en este caso.

function do_something() { // some code return $.when(foo, bar, baz).done(function(_foo_2, _bar_2, _baz_2){ do_something_else.apply(this,_foo_2); }); }

.en realidad, crea un nuevo objeto diferido y lo envía a la cadena. Como no devolvió nada de .then , el nuevo objeto aplazado no tiene argumentos. Vea este ejemplo:

$.when($.Deferred().resolve(2), $.Deferred().resolve(4)) .then(function(a,b) { console.log(a,b); // 2,4 return $.Deferred().resolve(a,b,6); }).then(function(a,b,c) { console.log(a,b,c); // 2,4,6 });

Si en cambio solo .done , funcionaría como se esperaba.

$.when($.Deferred().resolve(2), $.Deferred().resolve(4)) .done(function(a,b) { console.log(a,b); }).done(function(a,b) { console.log(a,b); });

El uso más común para .then es encadenar solicitudes ajax:

$.ajax({...}).then(function(){ return $.ajax({...}); }).then(function(){ return $.ajax({...}); }).then(function(){ return $.ajax({...}); }).then(function(){ return $.ajax({...}); });

que también se puede hacer fácilmente en un bucle. Cada .then tendrá acceso a los datos devueltos de la solicitud anterior.

Tengo una función que hace algo como esto:

function do_something() { // some code return $.when(foo, bar, baz).then(do_something_else); } function do_something_else(_foo, _bar, _baz) { // do something else return /* the original inputs */; }

Entonces, cuando alguien usa do_something , también puede encadenar más devoluciones de llamada, como:

do_something().then(function(_foo_2, _bar_2, _baz_2) { console.log(_foo_2, _bar_2, _baz_2); });

El problema es que no sé cómo omitir el retorno original de do_something_else a la función anónima descrita. No quiero recibir una lista, sino argumentos posicionales, así que "cuando foo" inserta algún valor en el _foo de do_something_else y luego el mismo valor va a _foo_2.

¿Cómo puedo hacerlo en JS?