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
}
Comment puis-je ajouter un délai dans le dernier bloc, afin d'attendre le temps spécifié avant de passer le contrôle aux appelants d'extraction puis aux blocs?
Retourne une promesse du gestionnaire then
qui attend:
.then(() => new Promise(resolve => setTimeout(resolve, 1000)))
Si vous voulez "transmettre" la valeur de la promesse, alors
.then(x => new Promise(resolve => setTimeout(() => resolve(x), 1000)))
Pour éviter cette passe partout, écrivez une fonction utilitaire:
function sleeper(ms) {
return function(x) {
return new Promise(resolve => setTimeout(() => resolve(x), ms));
};
}
puis utilisez-le comme dans
.then(sleeper(1000)).then(...)
C'est l'une des rares situations où vous créez une nouvelle promesse:
fetch() {
return axios.get('/rest/foo')
.then(value => new Promise(resolve => {
setTimeout(() => {
resolve(value);
}, delayInMilliseconds);
})
);
}
S'il est possible que value
soit une promesse, insérez .then(value => Promise.resolve(value))
dans la chaîne:
fetch() {
return axios.get('/rest/foo')
.then(value => Promise.resolve(value)) // ***
.then(value => new Promise(resolve => {
setTimeout(() => {
resolve(value);
}, delayInMilliseconds);
})
);
}