finally(), you don't have to duplicate that cleanup logic in both the promise’s fulfillment and rejection handlers.
:( === "frowny face" ... :)
why in codesandbox you have return films.slice() but not in the videos?
@Philip: Good catch! Unfortunately, I only realized that I should've added
.slice() after recording most of the course, which is why it's in the code example, but not in the videos.
So why do we need
.slice() at all? The
getFilmTitles() function should be a pure function, which means it shouldn't mutate its parameters. However calling
.sort() on an array will sort the array in-place rather than returning a new array in which all elements are sorted. By calling
.slice() first, we create a new array which is then mutated in place. This is fine because we're no longer changing the
This is not an issue in the code shown in this lesson because we're sorting the
films array that we just got back from
response.json() — nobody else is referencing it. Still, the
getFilmTitles method was intended to be a pure function, so I've fixed it in the code examples.