2017-07-15 9 views
1

私はExpress API上でアーティストの詳細を要求するルートを持っています。このレスポンスには、そのアーティストのリリースの配列が含まれています。ネストされた約束が配列にプッシュしない

現在、私はその配列をマップし、URLを抽出してから、そのURLへのAPI呼び出しを行いたいと思います。私が返す応答は、私は配列にプッシュする必要があると考えているので、配列は最終的に私の応答として返すことができます。 (これはフロントエンドのバックエンドです)

しかし、私がコンソールにログを記録すると、それは空です。

私はnpmでrequest-promiseライブラリを使用しています。

これは間違いありませんか?私は私の処刑に移る前にすべての約束が確実に解決されることをどうにかしておく必要があると思っていますが、どのようにわかりませんか?

route.get('/search', (req, res) => { 
    const artist = req.query.artist || ''; 
    let releases = []; 

    rp.get(`https://api.discogs.com/database/search?artist=${artist}&type=release&format=Vinyl&per_page=5&page=1`) 
     .then(({results}) => results.map(({resource_url}) => resource_url)) 
     .then((resource_urls) => resource_urls.map((resource_url) => rp.get(resource_url).then((release) => releases.push(release)))) 
     .then(() => console.log(releases)) 
     .catch((err) => console.log(err)) 
}); 

答えて

0

あなたは前に宣言releases変数を使用チェーンでPromise.allを使用してすることはできません。

route.get('/search', (req, res) => { 
    const artist = req.query.artist || ''; 

    rp.get(`https://api.discogs.com/database/search?artist=${artist}&type=release&format=Vinyl&per_page=5&page=1`) 
     .then(({results}) => results.map(({resource_url}) => resource_url)) 
     .then((resource_urls) => Promise.all(resource_urls.map((resource_url) => rp.get(resource_url))) 
     .then((releases) => console.log(releases)) 
     .catch((err) => console.log(err)) 
}); 
+1

をありがとう、そんなに、ありがとうございます。 – pgGriff

関連する問題