Есть ли негативные побочные эффекты, если обещание никогда не уладится? - PullRequest
2 голосов
/ 13 апреля 2020

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

Это позволяет мне настроить систему в состоянии загрузки, и я могу проверить правильность поведения при загрузке.

it("Return state 'LOADING'", () => {
    sinon.stub(api, 'findMySessions').returns(new Promise(r => {}));
    // loadMySessions is an async function, but I don't await it.
    loadMySessions(); 
    // Now the state of my system reflects the state it's in while waiting for a response
    expect(getState()).to.equal("LOADING");
});

afterEach(() => { sinon.reset() });

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

Однако node.js (или какой-либо из запущенных javascript двигателей) может дать обещаниям специальную обработку, например, для обработки необработанных отклонений или другого запуска проблемы времени.

Так может ли этот фрагмент кода вызвать утечку или это безопасно?

1 Ответ

3 голосов
/ 13 апреля 2020

Если не урегулирование означает, что что-то содержит ссылку на обещание, которое в противном случае было бы выпущено, нет, никогда не выполнение обещания не является проблемой. Обещания - это просто объекты, а урегулированные / неустановленные - это просто состояние объекта.


¹ (, хотя нативные имеют некоторое взаимодействие с движком JavaScript, чего нет у обычных объектов, поэтому двигатель может разумно эффективно сообщать о необработанных отклонениях )

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