Создают ли функции генератора утечки памяти, если я ничего не возвращаю? - PullRequest
0 голосов
/ 03 августа 2020

Я использую сагу о сокращении в своем проекте, и это моя сага для получения данных из базы данных.

export function* fetchCollectionsAsync() {
  try {
    const collectionRef = firestore.collection("collections");
    const snapshot = yield collectionRef.get();
    if (snapshot.empty) yield put(fetchCollectionsFailure("snapshot is empty"));

    //call is the effect inside of our generator function that invokes the method.
    //we want to yield collectionsMap incase async code takes longer we expect.
    const collectionsMap = yield call(convertCollectionSnapshotToMap, snapshot);
    //sagas do not dispatch actions using dispatch
    yield put(fetchCollectionsSuccess(collectionsMap));
  } catch (e) {
    yield put(fetchCollectionsFailure(e));
  }
}

когда эта функция вызывается первой, она будет передана в стек вызовов, новый будет создан контекст выполнения, и будет возвращен объект итератора , который используется для управления выполнением функции генератора.

Итак, после того, как объект итератора будет возвращен, эта функция генератора будет вытолкнута из стека, но он не будет полностью отброшен, он будет в состоянии Suspended . Поскольку итератор сохраняет ссылку на эту функцию, его контекст выполнения будет активен, пока итератору он нужен. Каждый раз, когда мы вызываем iterator.next (), он повторно активирует контекст выполнения и снова передает его в стек вызовов.

Если эта функция генератора имела оператор возврата, когда программа встречает «возврат», она завершает работу генератора ; s выполнение путем перевода генератора в завершенное состояние.

это мои общие знания о функции генератора и контексте выполнения в javascript. Меня беспокоит то, что я ничего не возвращаю из этой функции генератора (и у меня есть другие функции генератора для разных саг), ее контекст выполнения будет активен, и он не будет собираться мусором.

Я завершил свой проект, но когда я развертываю его на heroku, процесс сборки проходит успешно, но поскольку он значительно превышает квоту, мое приложение не запускается. Я думаю, что эти саги могут вызвать утечку памяти, и я подозреваю, что саги могут вызвать проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...