我一直试图获得一系列承诺,同时解决所有问题。我知道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并让它作为回调函数工作?为什么我必须“手动”调用它?
答案 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);