2017-07-30 45 views
0

私はノードで作業しています。私はIDの配列を持っています。私は他のAPIの呼び出しの応答に基づいてそれらをフィルタリングしたい。だから、私はそれぞれのIDを入力し、私がAPIに基づいてやっているフィルタをアサートするかどうかを知りたい。NodeJS - マップforEach Async/Await

私はasync/awaitを使用しています。私は、Promises.allを使用することが最善の方法だが、これは期待どおりに機能していないことがわかった。私は何を間違っているのですか?

static async processCSGOUsers (groupId, parsedData) { 

     let steamIdsArr = []; 

     const usersSteamIds = parsedData.memberList.members.steamID64; 

     const filteredUsers = await Promise.all(usersSteamIds.map(async (userId) => { 
      return csGoBackpack(userId).then((response) => { 
        return response.value > 40; 
       }) 
       .catch((err) => { 
        return err; 
       }); 
     })); 

     Object.keys(usersSteamIds).forEach(key => { 
      steamIdsArr.push({ 
       steam_group_id_64: groupId, 
       steam_id_64: usersSteamIds[key] 
      }); 
     }); 

     return UsersDao.saveUsers(steamIdsArr); 
} 

それ以外は、何か変わっています。私がこれをデバッグするとき、このメソッドのデータパラメータはうまくいきます。私がPromise.allのラインに到達するとき、私は各パラメータで "参照エラー"を得ました。私はなぜそうではありません。その後、すべての応答のための

+1

あなたを使用して簡単な方法で何かのこの種を行うことができますどこでも 'filteredUsers'を使用していませんが、もしあなたがそうだったとしても、その変数名に基づいて予想されるように、フィルターされた配列の配列ではなく、ブール値の配列になります。 –

+0

申し訳ありませんが、filteredUsersはObject.keysに移動します(更新するのを忘れてしまいます)。あなたはブール値で正しいですが、私はあまりにもそれを取得していません:/ –

+0

あなたはあなたの質問を編集することができます間違いを修正します。 –

答えて

2

を待ち、その結果に基づいてフィルタリング:あなたはモジュールを使用して気にしない場合は

const responses = await Promise.all(usersSteamIds.map(csGoBackpack)); 
// responses now contains the array of responses for each user ID 
// filter the user IDs based on the corresponding result 
const filteredUsers = usersSteamIds.filter((_, index) => responses[index].value > 40); 
+0

これは、私は、 –

+0

ニースの答え! :D:D:D –

関連する問題