在es6 specification中,它表示将不可调用传递给承诺then
将会在履行承诺后设置承诺"处理器进入"身份"。在another section规范中,它表示"身份"是一个计算给定值的函数。根据什么规范说我假设这段代码:
Promise.resolve("foo").then(Promise.resolve("bar")).then(v => console.log(v))
等于这段代码:
Promise.resolve("foo").then(v => Promise.resolve("bar")).then(v => console.log(v))
但如果两个代码示例都是在最新的Chrome或Firefox中执行的,那么第一个代码示例会输出" foo"和第二个输出" bar"。我在哪里误解了规范?
答案 0 :(得分:2)
根据ECMAScript-6的this section,
如果[[Handler]] “Identity”,它等同于只返回其第一个参数的函数。
因此,您可以将Identity
视为以下箭头功能
(first) => first
所以,你的承诺链
Promise.resolve("foo").then(Promise.resolve("bar")).then(v => console.log(v))
有效地成为
Promise.resolve("foo").then((first) => first).then(v => console.log(v))
这就是你得到foo
的原因。