Chained promises test

by PhilQ

JavaScript

const logAndReturn = (m) => {
	console.log(m)
	return m
}

const getPromise = (t) => {
	return new Promise((resolve, reject) => {
		setTimeout(() => {
			console.log(`Finished A${t}`)
			resolve(`A${t}`)
		}, t)
	})
	.catch(e => Promise.reject(logAndReturn(`Error A: ${e}`)))
	.then(r => new Promise((resolve, reject) => {
			setTimeout(() => {
				console.log(`Finished B${t} [${r}]`)
				reject(`B${t}`)
			}, t)
		})
		.catch(e => Promise.reject(logAndReturn(`Error B: ${e}`)))
	)
	.then(r => new Promise((resolve, reject) => {
			setTimeout(() => {
				console.log(`Finished C${t} [${r}]`)
				reject(`C${t}`)
			}, t)
		})
		.catch(e => Promise.reject(logAndReturn(`Error C: ${e}`)))
	)
	.catch(e => logAndReturn(`Error *: ${e}`))
}

const promises = [1000, 2000];

Promise.allSettled(
	promises.map(t => getPromise(t))
)
.then(results => {
	console.log(JSON.stringify(
		results.map(r => r.status === "fulfilled" ?
			`Success: ${r.value}` :
			`Error: ${r.reason}`
		)
	))
})