diff --git a/01-making-promises/answers.js b/01-making-promises/answers.js index 36dc24b..8e23440 100644 --- a/01-making-promises/answers.js +++ b/01-making-promises/answers.js @@ -5,8 +5,11 @@ * * @returns {Promise<3>} */ -function makePromiseResolveWith3(){ - /* IMPLEMENT ME! */ +function makePromiseResolveWith3() { + return new Promise((resolve) => { + resolve(3); + + }); } /** @@ -15,8 +18,11 @@ function makePromiseResolveWith3(){ * * @returns {Promise<,"Boo!">} */ -function makePromiseRejectWithBoo(){ - /* IMPLEMENT ME! */ +function makePromiseRejectWithBoo() { + return new Promise((resolve, reject) => { + reject('Boo!'); + + }); } /** @@ -27,10 +33,13 @@ function makePromiseRejectWithBoo(){ * @returns {Promise} */ -function makePromiseWithConstructor(itShouldResolve){ +function makePromiseWithConstructor(itShouldResolve) { return new Promise((resolve, reject) => { - /* If itShouldResolve is true, call resolve */ - /* If itShouldResolve is false, call reject */ + if (itShouldResolve == true) { + resolve('truthy'); + } else { + reject('falsy'); + } }); } @@ -42,8 +51,12 @@ function makePromiseWithConstructor(itShouldResolve){ * @param {number} delayInMs * @return {Promise} - A promise that will resolve with the value after delayInMs milliseconds */ -function makeDelayPromise(value, delayInMs){ - /* Return a promise that resolves with the value after delayInMs */ +function makeDelayPromise(value, delayInMs) { + return new Promise((resolve) => { + setTimeout(() => { + resolve(value); + }, delayInMs); + }); } module.exports = { diff --git a/01-making-promises/test.js b/01-making-promises/test.js index 2482fc8..fb46101 100644 --- a/01-making-promises/test.js +++ b/01-making-promises/test.js @@ -39,10 +39,10 @@ describe('Promise constructor "new Promise((resolve, reject) => void) => Promise return makePromiseWithConstructor(false) .then(() => { assert.fail('This should have failed.'); - }, () => {}); + }, () => { }); }); }); - describe('#makeDelayPromise: (A, number) => Promise', () =>{ + describe('#makeDelayPromise: (A, number) => Promise', () => { it('returns a promise that resolves with the value', () => { const start = new Date(); return makeDelayPromise('Hello', 0) diff --git a/02-consuming-promises/answers.js b/02-consuming-promises/answers.js index f3c87b4..5a30cbd 100644 --- a/02-consuming-promises/answers.js +++ b/02-consuming-promises/answers.js @@ -6,8 +6,10 @@ * @param {thunk} action * */ -function waitForPromise(promise, action){ - /* IMPLEMENT ME */ +function waitForPromise(promise, action) { + return promise.then(() => { + action(); + }); } /** * @@ -17,8 +19,12 @@ function waitForPromise(promise, action){ * @param {consumer} consumer * @param {handler} handler */ -function consumePromise(promise, consumer, handler){ - /* IMPLEMENT ME! */ +function consumePromise(promise, consumer, handler) { + promise.then((value) => { + return consumer(value); + }).catch((error) => { + return handler(error); + }); } /** diff --git a/03-transforming-promises/answers.js b/03-transforming-promises/answers.js index 4650c17..07df82a 100644 --- a/03-transforming-promises/answers.js +++ b/03-transforming-promises/answers.js @@ -6,9 +6,13 @@ * @param {*} transformer * @returns {Promise} */ -function mapPromise(promise, transformer){ +function mapPromise(promise, transformer) { return new Promise((resolve, reject) => { - /* IMPLEMENT ME!! */ + promise + .then(value => transformer(value)) + .then(value => resolve(value)) + .catch(error => reject(error)) + .catch(error => reject(error)); }); } @@ -19,9 +23,19 @@ function mapPromise(promise, transformer){ * @param {Promise} numberPromise * @returns {Promise} */ -function squarePromise(numberPromise){ +function squarePromise(numberPromise) { return numberPromise - .then(/* IMPLEMENT ME! */); + .then(response => { + return new Promise((resolve, reject) => { + if (!isNaN(response)) { + resolve(response * response); + } else { + reject(`Cannot convert '${response}' to a number!`); + } + + }); + + }); } /** @@ -30,9 +44,13 @@ function squarePromise(numberPromise){ * @param {Promise} numberPromise * @returns {Promise} */ -function squarePromiseOrZero(promise){ +function squarePromiseOrZero(promise) { return squarePromise(promise) - .catch(/* IMPLEMENT ME! */); + .catch(() => { + return new Promise((resolve) => { + resolve(0); + }); + }); } /** @@ -41,8 +59,8 @@ function squarePromiseOrZero(promise){ * @param {Promise} promise * @returns {Promise} */ -function switcheroo(promise){ - return promise.then(/* IMPLEMENT ME */); +function switcheroo(promise) { + return promise.then(res => Promise.reject(res), res2 => Promise.resolve(res2)); } /** diff --git a/04-chaining-promises/answers.js b/04-chaining-promises/answers.js index 15c87be..f8eaf87 100644 --- a/04-chaining-promises/answers.js +++ b/04-chaining-promises/answers.js @@ -5,10 +5,16 @@ * @param {Promise} promise * @param {function} asyncTransformer */ -function flatMapPromise(promise, asyncTransformer){ +function flatMapPromise(promise, asyncTransformer) { return new Promise((resolve, reject) => { promise - .then(/* IMPLEMENT ME! */); + .then(response => { + resolve(asyncTransformer(response)); + + }) + .catch((error) => { + reject(error); + }); }); } @@ -19,8 +25,10 @@ function flatMapPromise(promise, asyncTransformer){ * @param {Promise} firstPromise * @param {function} slowAsyncProcess */ -function chainTwoAsyncProcesses(firstPromise, slowAsyncProcess){ - return firstPromise.then(/* IMPLEMENT ME! */); +function chainTwoAsyncProcesses(firstPromise, slowAsyncProcess) { + return firstPromise.then(response => { + return (slowAsyncProcess(response)); + }); } /** @@ -30,9 +38,16 @@ function chainTwoAsyncProcesses(firstPromise, slowAsyncProcess){ * @param {function} getUserById * @param {function} getOrganizationById */ -function makeGetUserByIdWithOrganization(getUserById, getOrganizationById){ - return function getUserByIdWithOrganization(userId){ - /* IMPLEMENT ME! */ +function makeGetUserByIdWithOrganization(getUserById, getOrganizationById) { + return function getUserByIdWithOrganization(userId) { + return getUserById(userId).then(userobj => { + if (userobj) { + return getOrganizationById(userobj.organizationId).then(orgobj => { + userobj.organization = orgobj; + return userobj; + }); + } + }); }; } diff --git a/05-callbacks/answers.js b/05-callbacks/answers.js index 39bd19b..e586422 100644 --- a/05-callbacks/answers.js +++ b/05-callbacks/answers.js @@ -3,9 +3,9 @@ * @param {string} password * @returns {User | undefined} */ -function passwordChecker(email, password){ - if(email === 'jeff@jeff.jeff' && password === 'jeff'){ - return {name: 'Jeff Jeffries', email: 'jeff@jeff.jeff'}; +function passwordChecker(email, password) { + if (email === 'jeff@jeff.jeff' && password === 'jeff') { + return { name: 'Jeff Jeffries', email: 'jeff@jeff.jeff' }; } return undefined; } @@ -15,9 +15,9 @@ function passwordChecker(email, password){ * @param {string} password * @param {nodeStyleCallback} cb */ -function passwordCheckerCb(email, password, cb){ +function passwordCheckerCb(email, password, cb) { const user = passwordChecker(email, password); - if(user){ + if (user) { cb(null, user); } else { setTimeout(() => { @@ -34,10 +34,12 @@ function passwordCheckerCb(email, password, cb){ * @param {string} password * @returns {Promise} */ -function passwordCheckerPrms(email, password){ +function passwordCheckerPrms(email, password) { return new Promise((resolve, reject) => { passwordCheckerCb(email, password, (error, user) => { - /* IMPLEMENT ME! */ + if (!error) { + resolve(user); + } else { reject(error); } }); }); } @@ -50,7 +52,14 @@ function passwordCheckerPrms(email, password){ * @param {*} fnParams * @return {Promise} */ -function makePromiseFromFunctionWithCallback(fn, ...fnParams){ +function makePromiseFromFunctionWithCallback(fn, ...fnParams) { + return new Promise((resolve, reject) => { + fn(...fnParams, (error, user) => { + if (!error) { + resolve(user); + } else { reject(error); } + }); + }); /* Return a promise that - calls fn with the fnParams and a callback (like fn(...fnParams, cb))