-
Consuming PromisesStudy/JavaScript 2020. 5. 15. 18:05
Consuming Promises
The initial state of an asynchronous promise is `pending`, but we have a guarantee that it will settle. How do we tell the computer what should happen then? Promise objects come with an aptly named '.then()' method. It allows us to say, “I have a promise, when it settles, then here’s what I want to happen…”
In the case of our dishwasher promise, the dishwasher will run then:
- If our promise rejects, this means we have dirty dishes, and we’ll add soap and run the dishwasher again.
- If our promise fulfills, this means we have clean dishes, and we’ll put the dishes away.
'.then()' is a higher-order function— it takes two callback functions as arguments. We refer to these callbacks as handlers. When the promise settles, the appropriate handler will be invoked with that settled value.
- The first handler, sometimes called 'onFulfilled', is a success handler, and it should contain the logic for the promise resolving.
- The second handler, sometimes called 'onRejected', is a failure handler, and it should contain the logic for the promise rejecting.
We can invoke '.then()' with one, both, or neither handler! This allows for flexibility, but it can also make for tricky debugging. If the appropriate handler is not provided, instead of throwing an error, '.then()' will just return a promise with the same settled value as the promise it was called on. One important feature of '.then()' is that it always returns a promise. We’ll return to this in more detail in a later exercise and explore why it’s so important.
비동기 promise의 초기 상태는 아직 pending이지만,
우리는 그것이 해결될 것이라는 보증을 가지고 있다.
그러면 어떻게 해야 하는지 컴ous promise is `pending`, but we have a guarantee that it will settle. How do we tell the computer what should happen then? Promise objects come with an aptly named '.then()' method. It allows us to say, “I have a promise, when it settles, then here’s what I want to happen…”
In the case of our dishwasher promise, the dishwasher will run then:
If our promise rejects, this means we have dirty dishes, and we’ll add soap and run the dishwasher again.
If our promise fulfills, this means we have clean dishes, and we’ll put the dishes away.
'.then()' is a higher-order function— it takes two callback functions as arguments. We refer to these callbacks as handlers. When the promise settles, the appropriate handler will be invoked with that settled value.
The first handler, sometimes called 'onFulfilled', is a success handler, and it should contain the logic for the promise resolving.
The second handler, sometimes called 'onRejected', is a failure handler, and it should contain the logic for the promise rejecting.
We can invoke '.then()' with one, both, or neither handler! This allows for flexibility, but it can also make for tricky debugging. If the appropriate handler is not provided, instead of throwing an error, '.then()' will just return a promise with the same settled value as the promise it was called on. One important feature of '.then()' is that it always returns a promise. We’ll return to this in more detail in a later exercise and explore why it’s so important.
비동기 promise의 초기 상태는 아직 pending이지만,
우리는 그것이 해결될 것이라는 보증을 가지고 있다.
그러면 어떻게 해야 하는지 컴퓨터에 어떻게 말할 수 있을까?
promise 객체에는 적절히 이름 붙은 .then() 메소드가 있다.
그것은 우리에게
"내가 promise를 가지면, 이 promise가 해결될 때, 그 다음에 내가 하고 싶은 일은 여기에 있어.." 라고 말할 수 있게 해준다.
우리의 식기 세척기 promise의 경우, 식기세척기는 이렇게 작동할 것이다.
* 만약, 우리의 promise가 reject된다면, 그것은 우리가 더러운 접시를 가지고 있다는 걸 의미하고,
우리는 비누를 첨가해서 식기세척기를 다시 가동할 것이야.
* 만약, promise가 이행된다면, 이것은 우리가 깨끗한 접시를 가지고 있다는 것을 의미하고,
우리는 접시를 치울 것이야.
.then() 은 고차함수로서 두 가지 콜백함수를 인자로써 가진다.
우리는 이러한 콜백을 handler라고 부른다.
promise가 실행되었을때, 적절한 handler는 호출될 것이다. settled value값으로.
* 때때로 'onFulfilled'라고 불리우는 첫번째 handler 는 success handler이다. 이것은 promise 해결을위한 로직을 포함해야 한다.
* 때때로 'onRejected'라고 불리우는 두번째 handler는 failure handler이다. 이것은 promise rejecting 을 위한 로직을 포함해야한다.
우리는 한개 또는 둘다, 또는 이 둘다도 아닌 handler 와 함께 .then()을 호출할 수 있다.
이 것은 유연성을 허용하지만, 까다로운 디버깅도 할 수 있다.
만약 적절한 handler가 제공되지 않으면, 오류를 던지는 대신에,
.then()은 요청된 promise와 동일한 settled value를 가진 promise만 반환할 것이다.
.then()의 한가지 중요한 특징은 항상 promise를 반환한다는 것이다.
나중에 연습할 때 좀 더 자세히 이 문제로 돌아가, 왜 이렇게 중요한지 탐구해보자.
https://www.codecademy.com/courses/introduction-to-javascript/lessons/promises/exercises/then
'Study > JavaScript' 카테고리의 다른 글
Storage.setItem() (0) 2020.05.16 The onFulfilled and onRejected Functions (0) 2020.05.15 The Node setTimeout() Function (0) 2020.05.15 Constructing a Promise Object (0) 2020.05.15 What is a Promise? (0) 2020.05.15