javascript - node - Cómo agregar un retraso para prometer dentro de
node callbacks (2)
Devuelve una promesa del manejador que espera:
.then(() => new Promise(resolve => setTimeout(resolve, 1000)))
Si quiere "pasar" el valor de la promesa, entonces
.then(x => new Promise(resolve => setTimeout(() => resolve(x), 1000)))
Para evitar esta repetición, escriba una función de utilidad:
function sleeper(ms) {
return function(x) {
return new Promise(resolve => setTimeout(() => resolve(x), ms));
};
}
entonces utilízalo como en
.then(sleeper(1000)).then(...)
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo envolver setTimeout en una promesa 4 respuestas
fetch() {
return axios.get(''/rest/foo'')
//.then(response => {throw new Error(response)}) // Uncomment to test network error
//.then( <<add delay here>> ) // Uncomment to simulate network delay
}
¿Cómo agrego demora en el último bloque, por lo que esperará una cantidad de tiempo especificada antes de pasar el control a los buscadores de llamadas que luego bloquean?
Esta es una de las situaciones raras en las que creas una nueva promesa:
fetch() {
return axios.get(''/rest/foo'')
.then(value => new Promise(resolve => {
setTimeout(() => {
resolve(value);
}, delayInMilliseconds);
})
);
}
Si es posible que ese value
sea una promesa, inserte .then(value => Promise.resolve(value))
en la cadena:
fetch() {
return axios.get(''/rest/foo'')
.then(value => Promise.resolve(value)) // ***
.then(value => new Promise(resolve => {
setTimeout(() => {
resolve(value);
}, delayInMilliseconds);
})
);
}