测验:9 道 JavaScript Promise 题目
别再遗漏任何 Promise。
你真的懂 JavaScript Promise 吗?
- 来秀出你的 JavaScript 实力! 🚀
- 查看提示(右下角的大按钮)。
- 在浏览器的控制台中尝试运行代码(快捷键
F12)或使用 repl.it*。 - 欢迎随时 在 Twitter/X 上 @justsml 联系我。我很想听听你的想法!
👇 完成以下 9 道题目 👇
以下代码的输出结果是什么?
var p = new Promise((resolve, reject) => { reject(Error('The Fails!'))})p.catch(error => console.log(error.message))p.catch(error => console.log(error.message))我们使用构造函数方法创建了一个 Promise,并通过 reject 回调立即触发了一个错误。
随后,.catch 处理程序的行为类似于 DOM 的 .addEventListener(event, callback) 或 Event Emitter 的 .on(event, callback),即可以添加多个处理程序回调。每个回调都会接收到相同的参数并被调用。
以下代码的输出结果是什么?
var p = new Promise((resolve, reject) => { return Promise.reject(Error('The Fails!'))})p.catch(error => console.log(error.message))p.catch(error => console.log(error.message))在使用 Promise 构造函数时,你必须调用 resolve() 或 reject() 回调。Promise 构造函数会忽略执行器(executor)的返回值,因此通过 Promise.reject() 创建的额外 Promise 并未链接到 p。这两个处理程序被附加到了 p 上,而 p 仍处于 pending 状态,与此同时,返回的那个被拒绝的 Promise 会被宿主环境报告为未处理。
以下代码的输出结果是什么?
var p = new Promise((resolve, reject) => { reject(Error('The Fails!'))}).catch(error => console.log(error)).then(error => console.log(error))在链式调用 .then 和 .catch 时,将它们想象成一系列步骤会很有帮助。每个 .then 都会接收上一个 .then 返回的值(作为其参数)。但是,如果你的某个“步骤”遇到了错误,后续的所有 .then 步骤都将被跳过,直到遇到 .catch。如果你想覆盖错误并继续执行,只需返回一个非错误值即可。该值可以通过后续的任何 .then 访问。
以下代码的输出结果是什么?
var p = new Promise((resolve, reject) => { reject(Error('The Fails!'))}).catch(error => console.log(error.message)).catch(error => console.log(error.message))在链式调用 .catch 时,每个 .catch 只负责处理在其之前的 .then 或 .catch “步骤”中抛出的错误。在这个例子中,第一个 .catch 执行了 console.log 并返回了其结果,而这个结果只能通过在两个 .catch 之后添加 .then() 来获取。
