2017-06-13 18 views
2

私は同時にすべてを解決するという約束を得ることを試みてきました。私は約束のアレイ上Promise.allを起動しようとすると、私が使用する必要がプロミスチェーンのPromise.allとx => Promise.all(x)の違いは何ですか?

const one = Promise.resolve(1) 
 

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

:私はPromise.prototype.then()が解決された値を受け入れ、コールバックを取ることを知っていますそれを動作させるコールバック。

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を渡してコールバック関数として機能させることができないのはなぜですか?なぜ私はそれを '手動で'呼び出さなければならないのですか?

答えて

3

Promise.allPromise *をthisオブジェクトと呼びます。これは動作します(ただし、矢印の機能よりも冗長に)なります

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

*技術的には、これはhereを指定されています。多くの方法でPromiseに似た別のコンストラクタで呼び出すことができますが、実際にはPromiseを使用することになります。

関連する問題