javascript - w3school - ¿Cuál es el equivalente de ES6 Promise de jQuery Deferred''s ''always''?
tutorial promises (2)
Creo que lo siguiente es lo que estás buscando:
Promise.resolve(getUser("foo"))
.then(handleSuccess, handleError)
.then(tidyUp)
tidyUp siempre será llamado. Vea el siguiente jsbin para el ejemplo completo: http://jsbin.com/lujubu/edit?html,js,console,output
Esta pregunta ya tiene una respuesta aquí:
Tengo algo como lo siguiente:
getUser("foo").then(handleSuccess, handleError).always(tidyUp);
getUser
devuelve un objeto jQuery Deferred.
Entiendo de este artículo que puedo convertir el objeto Diferido en una Promesa nativa utilizando Promise.resolve
, por lo que puedo escribir
Promise.resolve(getUser("foo"))
.then(handleSuccess)
.catch(handleError)
Sin embargo, la API Promise no ofrece un método always
, así que me pregunto cómo se debe manejar eso.
¿Es como sigue?
Promise.resolve(getUser("foo"))
.then(handleSuccess)
.then(tidyUp)
.catch(handleError)
.then(tidyUp)
Use su función always
como el controlador para resolve
y reject
para asegurarse de que siempre se llamará.
function getUser(result) {
switch (result) {
case ''good'':
return Promise.resolve();
case ''bad'':
return Promise.reject();
case ''ugly'':
return new Promise(() => { throw new Error() })
}
}
function handleSuccess() { console.log(''success'') }
function handleError() { console.log(''error'') }
function tidyUp() { console.log(''all tidy now'') }
Promise.resolve(getUser(''good''))
.then(handleSuccess)
.catch(handleError)
.then(tidyUp, tidyUp);
Promise.resolve(getUser(''bad''))
.then(handleSuccess)
.catch(handleError)
.then(tidyUp, tidyUp);
Promise.resolve(getUser(''ugly''))
.then(handleSuccess)
.catch(handleError)
.then(tidyUp, tidyUp);
// success
// error
// error
// all tidy now
// all tidy now
// all tidy now