await
, по сути, является синтаксическим сахаром именно того кода, который вы заменяете (хорошо, за исключением того, что любой код, следующий за вашим блоком кода, также эффективно добавляется к предложению then - как это * Ключевое слово 1002 * эффективно блокирует выполнение до разрешения Promise
). Так что этот рефакторинг не должен влиять на потребление памяти.
Конкретный ответ на вопрос будет зависеть от двух вопросов. Во-первых, избегает ли перезапись замыканий (которые явны в исходном коде), а во-вторых (при условии, что ответ на первый вопрос - да), будет ли сборщик мусора отказывать в замыканиях GC так же, как и в том, что делает Обещание ( если это не подразумеваемое создание замыканий).
Я почти уверен, что ответ на первый вопрос - нет - что await Promise
действительно создает неявные замыкания. Поэтому я не думаю, что вы избегаете их в первую очередь.
И по второму вопросу, из моего прочтения, похоже, что замыкания приводят только к причудливым проблемам с сборкой мусора (то есть утечкам) в некоторых особых случаях:
https://www.ibm.com/developerworks/library/wa-use-javascript-closures-efficiently/index.html
https://auth0.com/blog/four-types-of-leaks-in-your-javascript-code-and-how-to-get-rid-of-them/
Поэтому, если использование вами замыканий не соответствует некоторым из этих шаблонов, я думаю, что даже в том случае, если ваше Promise неявно не создает такое же замыкание, вы все равно будете испытывать подобное поведение GC.