Я даже не уверен, как сформулировать этот вопрос, поэтому мне придется пойти с примерами. Это может быть не похоже на полезный код здесь, и действительно, это не так, но это пример проблемы, с которой я только что столкнулся, урезанной до нужной вещи.Javascript: Что происходит со старым объектом при создании нового экземпляра?
Lets' Предположим, у меня есть
function myObject(params) {
.. do some time-consuming asynchronous stuff
with AJAX and the like ...
return (before all the above is completed);
}
function myFunction(params) {
var doTheSlowStuff = new myObject(params);
}
myFunction(firstParams);
myFunction(moreParams);
Что происходит с первым MyObject, когда я делаю второй вызов MYFUNCTION()? Получает ли он возможность завершить свою работу (и если да, то будет ли это сбор мусора, когда он есть)? Или он бесцеремонно сбрасывается, прежде чем у него есть шанс закончить то, что он начал?
Оба вызова 'myObject' будут завершены (т. Е. Поведение async действительно произойдет дважды). Я не думаю, что вы включили достаточно информации в этот пример, чтобы точно сказать, будет ли потеряна какая-либо информация, но это вполне возможно. Каждый вызов 'myFunction' создает свою собственную переменную doTheSlowStuff, поэтому будущие вызовы не будут уничтожать' doTheSlowStuff' из другого вызова. Однако, если это значение выходит за рамки «myFunction», все ставки неактивны, и слияние может действительно произойти. – apsillers
Вы можете вернуть обещание от 'myObject' и обработать успех в' myFunction'. – elclanrs