Jak dodać opóźnienie do obietnicy w środku [duplikat]
To pytanie ma już odpowiedź tutaj:
- Jak zawinąć setTimeout w obietnicę 4 odpowiedzi
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
}
Jak dodać opóźnienie w tym drugim bloku, tak aby czekało określoną ilość czasu przed przekazaniem kontrolki do wywołujących fetch, a następnie blokuje?
14
Author: Tuomas Toivonen, 2016-08-15
2 answers
Zwraca obietnicę z then
obsługi, która czeka:
.then(() => new Promise(resolve => setTimeout(resolve, 1000)))
Jeśli chcesz "przekazać" wartość obietnicy, to
.then(x => new Promise(resolve => setTimeout(() => resolve(x), 1000)))
Aby uniknąć tego kotła wszędzie, napisz funkcję użytkową:
function sleeper(ms) {
return function(x) {
return new Promise(resolve => setTimeout(() => resolve(x), ms));
};
}
Następnie użyj go jak w
.then(sleeper(1000)).then(...)
Jest to jedna z rzadkich sytuacji, kiedy tworzysz nową obietnicę:
fetch() {
return axios.get('/rest/foo')
.then(value => new Promise(resolve => {
setTimeout(() => {
resolve(value);
}, delayInMilliseconds);
})
);
}
Jeśli jest to możliwe, że value
może być obietnicą, Wstaw .then(value => Promise.resolve(value))
w łańcuchu:
fetch() {
return axios.get('/rest/foo')
.then(value => Promise.resolve(value)) // ***
.then(value => new Promise(resolve => {
setTimeout(() => {
resolve(value);
}, delayInMilliseconds);
})
);
}
0
Author: T.J. Crowder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-15 13:59:35
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-15 13:59:35