Last reviewed
Correct answer: B. Promises
Explanation
Promises are the ES6 answer to a specific pain. Before them every asynchronous step took a callback, and stacking steps meant nesting callbacks inside callbacks; MDN names the result exactly as you would expect, noting that "In the old days, doing several asynchronous operations in a row would lead to the classic callback hell". A promise replaces that nesting with an ordinary value you can hold, return and chain, because it "represents the eventual completion (or failure) of an asynchronous operation and its resulting value". The sixth edition's own introduction lists "lexical block scoping, iterators and generators, promises for asynchronous programming, destructuring patterns" among its major enhancements, which is where the ES6 label in this question comes from. You will collide with this tomorrow the first time you call fetch: it hands back a promise, so you either chain then and catch onto it or put await in front of it. Async and await came later and are syntax layered over this same object, so promises are not groundwork you get to skip. Each wrong answer names something real that has nothing to do with asynchrony.
Sources
“The Promise object represents the eventual completion (or failure) of an asynchronous operation and its resulting value.”
“In the old days, doing several asynchronous operations in a row would lead to the classic callback hell”
“lexical block scoping, iterators and generators, promises for asynchronous programming, destructuring patterns”
Practise 3 questions on this topic
Take JavaScript ES6 Features — Timed Test (3 questions) — scored instantly, explanation for every question, no login.