Promises Questions Javascript

Q1. What's the output?

console.log("start");

const promise1 = new Promise((resolve, reject) => {
	console.log(1);
	resolve(2);
});

promise1.then((res) => {
	console.log(res);
});

console.log("end");

?

Answer

// start
// 1
// end
// 2

Q2. What's the output?

console.log("start");

const promise1 = new Promise((resolve, reject) => {
	console.log(1);
	resolve(2);
	console.log(3);
});

promise1.then((res) => {
	console.log(res);
});

console.log("end");

?

Answer

// start
// 1
// 3
// end
// 2

Followup 1: What's the output

console.log("start");

const promise1 = new Promise((resolve, reject) => {
	console.log(1);
	console.log(3);
});

promise1.then((res) => {
	console.log(res);
});

console.log("end");

?

Answer

// start
// 1
// 3
// end

Q3. What's the output?

console.log("start");

const fn = () => 
	new Promise((resolve, reject) => {
		console.log(1);
		resolve("success");
	})

console.log("middle");

fn().then((res) => {
	console.log(res);
});

console.log("end");

?

Answer

// start
// 1
// middle
// end
// success

Q4. What's the output?

function job() {
	return new Promise(function (resolve, reject) {
		reject();
	});
}

let promise = job();

promise
	.then(function() {
		console.log("Success 1");
	})
	.then(function() {
		console.log("Success 2");
	})
	.then(function() {
		console.log("Success 3");
	})
	.catch(function() {
		console.log("Error 1");
	})
	.then(function() {
		console.log("Success 4");
	});

?

Answer

// Error 1
// Success 4

Q5. What's the output?

function job(state) {
	return new Promise(function (resolve, reject) {
		if (state) {
			resolve("success");
		} else {
			reject("error");
		}
	});
}

let promise = job(true);

promise
	.then(function (data) {
		console.log(data);
		
		return job(false);
	})
	.catch(function (error) {
		console.log(error);
		
		return "Error caught";
	})
	.then(function (data) {
		console.log(data);
		
		return job(true);
	})
	.catch(function (error) {
		console.log(error); 
	})

?

Answer

// success
// error
// Error caught

Q6. What's the output?

function job(state) {
	return new Promise(function (resolve, reject) {
		if (state) {
			resolve("success");
		} else {
			reject("error");
		}
	});
}

let promise = job(true);

promise
	.then(function (data) {
		console.log(data);
		
		return job(true);
	})
	.then(function (data) {
		if (data !== "victory") {
			throw "Defeat";
		}
		return job(true);
	})
	.then(function (data) {
		console.log(data);
	})
	.catch(function (error) {
		console.log(error);
		return job(false);
	})
	.then(function (data) {
		console.log(data);
		return job(true);
	})
	.catch(function (error) {
		console.log(error); 
		return "Error caught";
	})
	.then(function (data) {
		console.log(data); 
		return new Error("test"); // Not returning a promise
	})
	.then(function (data) {
		console.log("Success: ", data.message); 
	})
	.catch(function (data) {
		console.log("Error: ", data.message);
	});

?

Answer

// success
// Defeat
// error
// Error caught
// Success: test

Q7. Promise Chaining write an example

?

const firstPromise = new Promise((resolve, reject) => {
	resolve("First!");
})

const secondPromise = new Promise((resolve, reject) => {
	resolve(firstPromise);
});

secondPromise
	.then((res) => {
		return res;
	})
	.then((res) => {
		console.log(res);
	})
let p=() => new Promise((resolve, reject) => {
    console.log("P");
    resolve("qArg, from P");
})

let q = (arg) => new Promise((resolve, reject) => {
    console.log("Q", arg);
    resolve("rArg, from Q");
})

let r = (arg) => new Promise((resolve, reject) => {
    console.log("R", arg);
    resolve("rArg");
})

p().then(q).then(r);

Q8. Rewrite this example code using async await instead of .then .catch in loadJson

function loadJson(url) {
	return fetch(url).then((response) => {
		if (response.status == 200) {
			return response.json();
		} else {
			throw new Error(response.status);
		}
	});
}

loadJson("https://fakeurl.com/no-such-user.json")
	.catch((err) => {
		console.log(err);
	});

?

Answer

async function loadJson(url) {
	let response = await fetch(url);
	
	if (response.status == 200) {
		let json = await response.json();
		return json;
	}
	
	throw new Error(response.status);
}

loadJson("https://fakeurl.com/no-such-user.json")
	.catch((err) => {
		console.log(err);
	});

Q9. Solve Promise Recursively

function promRecurse(funcPromises) {
	// Write implementation here
}

https://youtu.be/HaJdoFp2OEc?t=2639&si=vp3xcxqVGVhoCehN

Source