javascript then превращает Promise в undefiend - пример кода для понимания работы
Primary tabs
Такое происходит, если навешанный then ничего не возвращает, сравните два примера:
const responsePromise = new Promise(function(resolve) { setTimeout(() => { resolve('myValue')}, 1000); // разрешаем пропис через секунду }) .then(function (response: any) { console.log('response in then', response); // return response; // расскомментируйте, и тогда // через 2 секунды промис будет иметь строковое значение // а не undfefined }) .catch(function (error: any) { console.log('error', error); }); setTimeout( () => { console.log('promise val value after resolve:', responsePromise); }, 2000); // через 2 секунды проверим состояние console.log('responsePromise' , responsePromise);
И тот, что возвращает:
const responsePromise = new Promise(function(resolve) { setTimeout(() => { resolve('myValue')}, 1000); // разрешаем пропис через секунду }) .then(function (response: any) { console.log('response in then', response); return response; // возвращаем значение! }) .catch(function (error: any) { console.log('error', error); }); setTimeout( () => { console.log('promise val value after resolve:', responsePromise); }, 2000); // через 2 секунды проверим состояние console.log('responsePromise' , responsePromise);
-- во втором случае при распечатке объекта в value промиса мы увидим строку, что и требуется.
- Log in to post comments
- 564 reads