davhojt
893e21b6f7
|
2 years ago | |
---|---|---|
.. | ||
README.md | 2 years ago |
README.md
kept-promise
Instructions
Things in your code do not always happen as fast as you would like.
Sometimes it is important to wait for a function to finish before keep going on. Other times you don't want your code to be blocking while waiting.
Create an asynchronous function processInfo
in a file kept-promise.js
. The function processInfo
will take an asynchronous function as an input, and it will print the message Ok!
if the return of the input function is zero or a multiple of two, Error!
otherwise.
The following function can be used as an example of input function for processInfo
:
const getImportantInfo = async () =>
new Promise(resolve => resolve(Math.round(Math.random() * 10)))
Assume that your function will always get a valid input function
Example
The following script main.js
can be used to test your function:
import processInfo from './kept-promise.js'
const getImportantInfo = () =>
new Promise(resolve => resolve(Math.round(Math.random() * 10)))
console.log(await processInfo(getImportantInfo))
The output should be the following:
$ node main.js
Ok!
$ node main.js
Error!
$ node main.js
Ok!
$
Hints
-
Asynchronous behavior, in the context of server-side JavaScript, refers to the ability of running code in a non-blocking way, meaning for instance that the server can handle multiple requests simultaneously without waiting for a long-running task to complete, avoiding blocking the server responsiveness. It is essential to achieve scalable and functional back-end Node applications.
-
A
Promise
is a special JS object that represent the result (success or failure) of an asynchronous operation. This special object is usually used to "wrap" asynchronous operations.Promise
s can have three different states: pending - the asynchronous operation has not finished yet, fulfilled/resolved - the asynchronous operation has finished successfully - or rejected - the asynchronous operation has finished, but something went wrong. When defined from scratch, it is possible to define aresolve
andreject
callback function for a newPromise
that will define the results of the success or failure of asynchronous operation happening inside thePromise
. -
It is possible to wait for an asynchronous function with the keyword
await
. Alternatively, it can be clearer to use the method.then
. Below an example of how to handle promises and, more generally, asynchronous operations.
const promise1 = new Promise((resolve, reject) => {
resolve('Success!')
})
console.log(await promise1)
// Expected output: "Success!"
promise1.then(value => {
console.log(value)
// Expected output: "Success!"
})