Promise.all与x =>之间的区别是什么?承诺链中的Promise.all(x)?

时间:2017-06-13 19:01:58

标签: javascript closures anonymous-function

我一直试图获得一系列承诺,同时解决所有问题。我知道Promise.prototype.then()接受一个接受已解析值的回调:

const one = Promise.resolve(1)

one.then( console.log ) // 1
one.then( x => console.log(x) ) // 1

当我尝试在Promise数组上调用Promise.all时,我必须使用回调来使它工作。

const two = Promise.resolve(2)
const three = Promise.resolve(3)

Promise.resolve([two, three])
  .then( xs => Promise.all(xs) ) // Works
  .then( console.log ) // [2,3]
  
Promise.resolve([two,three])
  .then( Promise.all ) // Error
  .then( console.log )

这里发生了什么?为什么我不能直接传入Promise.all并让它作为回调函数工作?为什么我必须“手动”调用它?

2 个答案:

答案 0 :(得分:3)

期望使用Promise.all *作为Promise对象调用

this。这会起作用(但比箭头函数更冗长):

Promise.resolve([two, three])
  .then(Promise.all.bind(Promise))
  .then(console.log)

*从技术上讲,这是here;可以通过多种方式在另一个与Promise类似的构造函数上调用它,但在实践中,您将希望自己使用Promise

答案 1 :(得分:0)

我可能会遗漏一些东西,但这不是你想要完成的事情:

const one = Promise.resolve(1);
const two = Promise.resolve(2);
const three = Promise.resolve(3);

Promise.all([one,two,three]).then(console.log);