此代码适用于Chrome(47),FF(43)和Node.js(4.2.2):
Promise.resolve()
.then(function() {
return new Array(5).fill(Promise.resolve('hello world'));
})
.then(function(promisesArr) {
return Promise.all(promisesArr);
})
.then(function(allResults) {
console.log(allResults);
}).catch(function(err) {
console.log('FAILED: ' + err);
});
然而第二个。然后包含一个无用的'匿名函数(使用相同的参数调用单个函数,返回结果)。
据我了解,这种模式可以而且应该直接引用函数本身来取代,如下所示:
Promise.resolve()
.then(function() {
return new Array(5).fill(Promise.resolve('hello world'));
})
.then(Promise.all)
.then(function(allResults) {
console.log(allResults);
}).catch(function(err) {
console.log('FAILED: ' + err);
});
然而,虽然这适用于FF,但它在Chrome上失败并且(可以预测,因为它也基于V8)在Node上分别用:
失败:TypeError:undefined不是函数
和
失败:TypeError:_runMicrotasks不是函数
我认为这是一个错误吗?或者我的理解是匿名函数可以被替换为对函数的简单引用不正确吗?
答案 0 :(得分:1)
这在很大程度上取决于函数的定义方式。如果函数使用对象的上下文,那么您需要提供一个适合该特定上下文的函数(即Promise对象)。
如果该功能使用this
,那么您需要执行以下操作:
Promise.all.bind(Promise);
但是如果函数直接使用Promise
对象,那么它并不重要。我仍然绑定它,以便与其他Promise
实现兼容。