Skip to content

面试题汇总

来自于自己的面试,以及牛客

Promise 输出结果

下面代码运行结果,并解释原因

js
Promise.resolve("a").then("b").then(Promise.resolve("c")).then(console.log);

TIP

输出 a

首先 promise 的状态是不可扭转的,Promise.resolve("a") 返回一个状态为已解决(fulfilled)且结果值为 "a" 的 Promise 对象。

then("b") 中 "b" 并非一个函数,这里的 "b" 会被忽略。根据 Promise 规范,如果 then 方法传入的参数不是函数,将使用默认透传处理器。这意味着该 Promise 对象的结果值保持不变,仍为 "a"

Promise.resolve("c") 同理,不是一个函数,因此最终会输出 a

(追问):如何才能输出 c

可以在 then 方法中传入一个函数,该函数返回 Promise.resolve("c"),例如:

js
Promise.resolve("a")
  .then(() => Promise.resolve("c"))
  .then(console.log);

该函数通过箭头函数隐式地返回了 Promise.resolve("c") 的结果。

Released under the MIT License.