2016-03-25 11 views
0

次のコードは最後のハンドラでPromise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}に解決されます。Promise.all()メソッドが値に解決されない

コンソールに約束してアレイを記録すると、それぞれがresolvedのステータスを持ち、すべての要求が満たされます。

MusicService 
    .getArtists() 
    .then((res) => { 
    let arr = res.filter((a) => { 
     return a.id.length; 
    }); 
    return Promise.all(arr.map(function(a) { 
     return fetch(`//service.com/api/artist/${a.id}`); 
    })); 
    }) 
    .then((res) => { 
     console.log(res); 
    }); 

これを行うには何が欠けていますか?これはに減少させることができる

+1

これらの ''のいずれかでコールバックが失敗した場合はどうなりますか?または「キャッチ」? – Neal

+1

@NielsSteenbeekこれは約束が働く方法です。あなたは約束を返すことができ、それは約束のチェーンに繋がれます。 – Neal

+0

"次のコードは、[Promise {[PromiseStatus]]:"保留 "、[[PromiseValue]]:未定義}'を最後のハンドラで解決します。ええ、あなたは何を期待しましたか? –

答えて

1

FWIW、:最後のコールバックでは

MusicService 
    .getArtists() 
    .then(res => Promise.all(
    res 
     .filter(a => a.id.length > 0) 
     .map(a => fetch(`//service.com/api/artist/${a.id}`)) 
    ) 
) 
    .then(res => { 
    console.log(res); 
    }); 

resは、それが何かすることはできません、fetch()結果の配列になります。

+0

はい、それは配列でなければなりませんが、私が得られるのはこの行です。その約束は保留中です。 –

+1

このexaxtコードをmockup 'getArtists()'と約束を返す 'fetch()'関数でテストすると、コールバックに値の配列が得られます。 a)あなたはちょうどこのコードを持っていて(微妙に違うものではない)、b)フェッチ関数は実際に値の約束を返します(微妙に異なるものではありません)。 – Tomalak

+0

私はすべてをダブルチェックしても、何がうまくいかないのか分かりません。とにかく、努力のおかげで。 –

関連する問題