Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 22 additions & 9 deletions 01-making-promises/answers.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,11 @@
*
* @returns {Promise<3>}
*/
function makePromiseResolveWith3(){
/* IMPLEMENT ME! */
function makePromiseResolveWith3() {
return new Promise((resolve) => {
resolve(3);

});
}

/**
Expand All @@ -15,8 +18,11 @@ function makePromiseResolveWith3(){
*
* @returns {Promise<,"Boo!">}
*/
function makePromiseRejectWithBoo(){
/* IMPLEMENT ME! */
function makePromiseRejectWithBoo() {
return new Promise((resolve, reject) => {
reject('Boo!');

});
}

/**
Expand All @@ -27,10 +33,13 @@ function makePromiseRejectWithBoo(){
* @returns {Promise<undefined, undefined>}
*/

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');
}
});
}

Expand All @@ -42,8 +51,12 @@ function makePromiseWithConstructor(itShouldResolve){
* @param {number} delayInMs
* @return {Promise<any>} - 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 = {
Expand Down
4 changes: 2 additions & 2 deletions 01-making-promises/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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<A>', () =>{
describe('#makeDelayPromise: (A, number) => Promise<A>', () => {
it('returns a promise that resolves with the value', () => {
const start = new Date();
return makeDelayPromise('Hello', 0)
Expand Down
14 changes: 10 additions & 4 deletions 02-consuming-promises/answers.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
* @param {thunk} action
*
*/
function waitForPromise(promise, action){
/* IMPLEMENT ME */
function waitForPromise(promise, action) {
return promise.then(() => {
action();
});
}
/**
*
Expand All @@ -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);
});
}

/**
Expand Down
34 changes: 26 additions & 8 deletions 03-transforming-promises/answers.js
Original file line number Diff line number Diff line change
Expand Up @@ -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));
});
}

Expand All @@ -19,9 +23,19 @@ function mapPromise(promise, transformer){
* @param {Promise<number | string>} numberPromise
* @returns {Promise<number>}
*/
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!`);
}

});

});
}

/**
Expand All @@ -30,9 +44,13 @@ function squarePromise(numberPromise){
* @param {Promise<number | string>} numberPromise
* @returns {Promise<number>}
*/
function squarePromiseOrZero(promise){
function squarePromiseOrZero(promise) {
return squarePromise(promise)
.catch(/* IMPLEMENT ME! */);
.catch(() => {
return new Promise((resolve) => {
resolve(0);
});
});
}

/**
Expand All @@ -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));
}

/**
Expand Down
29 changes: 22 additions & 7 deletions 04-chaining-promises/answers.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
});
});
}

Expand All @@ -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));
});
}

/**
Expand All @@ -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;
});
}
});
};
}

Expand Down
25 changes: 17 additions & 8 deletions 05-callbacks/answers.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
* @param {string} password
* @returns {User | undefined}
*/
function passwordChecker(email, password){
if(email === '[email protected]' && password === 'jeff'){
return {name: 'Jeff Jeffries', email: '[email protected]'};
function passwordChecker(email, password) {
if (email === '[email protected]' && password === 'jeff') {
return { name: 'Jeff Jeffries', email: '[email protected]' };
}
return undefined;
}
Expand All @@ -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(() => {
Expand All @@ -34,10 +34,12 @@ function passwordCheckerCb(email, password, cb){
* @param {string} password
* @returns {Promise<User, string>}
*/
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); }
});
});
}
Expand All @@ -50,7 +52,14 @@ function passwordCheckerPrms(email, password){
* @param {*} fnParams
* @return {Promise<any, any>}
*/
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))
Expand Down