НО Боюсь, что обещание может собрать мусор, так как по стандарту (насколько я знаю) вам всегда нужно .then()
для обещаний.
Нет.Насколько мне известно, такого стандарта не существует, в котором говорится, что ГХ освободит память, выделенную для объекта Promise
, если к нему не присоединен .then()
.
Обещаниябудет выполняться независимо от того, присоединен ли .then()
- или a .catch()
в этом отношении - к нему.
Так что мой вопрос заключается в том, нужно ли мне добавить пустой .then()
кубедитесь, что это не сборщик мусора слишком рано и функция не будет работать правильно.
Нет, вам не нужен пустой .then()
И это то же самоев браузере и NodeJS?
Да, если вы используете одну и ту же реализацию Promise
в обеих средах выполнения.
Итак, с этим все будет в порядке:
function foo() {
var newValues = ...;
this.getMessages().then((msgs: Array<any>) => {
this.saveMessages(msgs.concat(newValues));
});
}
Но, вы должны рассмотреть возможность присоединения .catch()
к нему для обработки любых ошибок.Если вы этого не сделаете, у вас будет UnhandledPromiseRejectionWarning
.В будущих версиях Node это может привести к сбою всего вашего приложения.Прочитайте об этом здесь
РЕДАКТИРОВАТЬ
Даже если родитель не имеет ничего для обработки или выполнения, программа будет ждать, пока каждое из 100 обещанийрешил.Попробуйте это:
const n = 100;
const sleep = (id, seconds) =>
new Promise(resolve => {
setTimeout(() => {
console.log(`promise with id ${id} is resolving`);
resolve();
}, seconds * 1000);
});
for (let i = 0; i < n; i++) {
sleep(i, 1 * i);
}
console.log("Last line of parent");