Promise.all 不应该作为传递给 .then 的函数工作
Shouldn't Promise.all work as the function passed to .then?
此代码适用于 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);
});
然而,第二个 .then 包含一个"无用"的匿名函数(调用具有相同参数的单个函数,返回结果)。
据我了解,这种模式可以而且应该通过直接引用函数本身来替换,如下所示:
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上失败,分别具有:
失败:类型错误:未定义不是函数
和
失败:类型错误:_runMicrotasks不是函数
我认为这是一个错误是否正确?还是我的理解是匿名函数可以替换为对要称为不正确的函数的简单引用?
这在很大程度上取决于函数的定义方式。如果函数使用对象的上下文,则需要提供适合该特定上下文的上下文(即 Promise 对象)。
如果函数使用this
那么你需要做:
Promise.all.bind(Promise);
但是,如果函数直接使用 Promise
对象,则没关系。不过,为了与其他Promise
实现兼容,我仍然会绑定它。
相关文章:
- Javascript:If-then语句在函数中不起作用
- Promise函数在.then之后未运行函数化
- 如何在异步函数中正确使用Promise.all()和then()
- $resource上带有.then()函数的角度自定义方法导致错误
- 当链接javascript承诺时,如何处理then()函数中的条件
- 角承诺的“then”函数的成功回调的词汇范围是什么?
- Node.js中的Promise.all没有't调用then函数
- q 从 .then 函数分配给更高级别的作用域变量是否存在任何陷阱
- 当承诺在监视函数中解析时,如何使承诺的 then 函数起作用
- 如何使 then 函数工作
- 取消以下“then”函数中的$timeout是否有效
- Ember 是否有总是回调.js .then 函数
- Angularjs.then函数创建一个var以传递到外部.then
- 在d3节点上调用if…then函数
- Angular - controllers .then函数在指令之后被调用,所以没有数据可用
- 如果“then"函数从未被调用,是否存在“失败”?我可以定义的选项
- Ionic confirmPopup then()函数在用户交互之前被调用
- '.then'函数工作在量角器E2E测试的一个angularjs
- 在使用$.when().then()函数时遇到问题
- 如何将下面的代码清理成if then函数