Ivá*_*hez 7 javascript v8 ecma promise ecmascript-6
有以下代码...
const array = [
Promise.resolve(1), Promise.resolve(2), Promise.resolve(3)
];
Array.prototype.then = function () {
console.log('Why does this gets triggered?');
}
Promise.all(array)
.then(result => console.log(result))
Run Code Online (Sandbox Code Playgroud)
为什么它Promise.all()本身会.then()在 Array 上调用我的proto 函数?
当然,它必须调用.then()数组中的每个元素。这很明显。但是在 Array 本身上这样做的目的是什么?
这种行为发生在 V8 上
要考虑:如果您更改Promise.all()为Promise.race()这种情况不会发生。
我并不是说这是一个错误。我只是想了解原因。如果您能在答案中引用 EcmaScript 规范,我将不胜感激。
更新:
我知道Promise.all()返回一个数组但包装在一个承诺上。这也是显而易见的。如果删除.then()喜欢...
Promise.all(array)
Run Code Online (Sandbox Code Playgroud)
它仍然执行该.then()方法。
当resolve()调用 a 时,并且传递给它的值具有.then引用函数的属性,正常的 Promise 机制将调用该函数。在这种情况下,Promise.all()当源数组中的每个 Promise 得到解析时,就会构建解析值数组的内部。完成后, 的内部结构Promise.all()将调用它自己的resolve(),并传入解析值的数组。
那么该数组还将有一个.then()从 Array 原型继承的值。因此,该调用将像任何其他 Promise 解析一样resolve()调用该方法。.then()
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |