2017-03-09 17 views
-2

私は約束を使用しています。これは私の質問に続きます。herePromise.allから値がNULLになる

私が抱えている問題は、応答として、つまりオブジェクトの配列にヌル値があることです。私はその後、私は店のリストとコールを反復私は

  • 店舗/ショップリストを取得し、私はuserIdを
  • がたユーザーIDを使用して、その後はuserId
  • からユーザーwhishlist製品をゲットこの

    1. ファーストを説明しようとしますこのストアがユーザーのお気に入りのストアであるかどうかを確認する別のAPI
    2. 次に、私は各店舗の商品を手に入れ、オブジェクトに追加して返します。

      function getStoresList(context) { 
          const userID = common.getUserID(context) 
          let userWishListProd = [] 
      
          return userID 
           .then(uid => Wishlist.getUserWishlistProducts(uid).then((products) => { 
            userWishListProd = products.data.map(product => +product.id) 
            return uid 
           })) 
           .then(uid => api.getOfficialStoresList(uid).then((response) => { 
             if (!response.data) { 
              const raw = JSON.stringify(response) 
              return [] 
             } 
      
             const shops = response.data 
             return Promise.all(
               shops.map((shop) => { 
                const id = shop.shop_id 
                const shopobj = { 
                 id, 
                 name: shop.shop_name, 
                } 
                return favAPI.checkFavourite(uid, id) 
                 .then((favData) => { 
                  shopobj.is_fave_shop = favData 
      
                  // Fetch the products of shop 
                  return getProductList(id, uid) 
                   .then((responsedata) => { 
                    shopobj.products = responsedata.data.products.map(product => ({ 
                     id: product.id, 
                     name: product.name, 
                     is_wishlist: userWishListProd.indexOf(product.id) > -1, 
                    })) 
                    return shopobj 
                   }) 
                   .catch(() => {}) 
                 }) 
                 .catch(err => console.error(err)) 
               })) 
              .then(responses => responses) 
              .catch(err => console.log(err)) 
            }) 
            .catch(() => {})) 
           .catch() 
      } 
      

    Iが得る応答は、実際の店舗は、添付されますヌル4としてではなくそれを

    [{ 
         "id": 1001, 
         "name": "Gaurdian Store", 
         "is_fave_shop": "0", 
         "products": [{ 
          "id": 14285912, 
          "name": "Sofra Cream", 
          "is_wishlist": false 
         }] 
        }, 
        null, 
        null, 
        { 
         "id": 1002, 
         "name": "decolite", 
         "is_fave_shop": "1", 
         "products": [{ 
          "id": 14285912, 
          "name": "Denca SPF", 
          "is_wishlist": false 
         }] 
        } 
    ] 
    

    来されます。ここで私が約束していることは間違っています。

  • 答えて

    0

    これは、あなたの.catch(() => {}).catch(err => console.error(err))の呼び出しと関係があるようです。ループ内の1つの約束がエラーの場合は、undefinedの値に変換されます(以前はオプションで報告されています)。はundefinedの値を含む配列で処理されます。 JSON.stringifyだと、nullというインデックスになります。

    何もしない(またはログに置き換える)ステートメントを削除し、エラーログを確認してください。

    +0

    'getProductList'コールが時々503を取得しているので、私はそれをキャッチし、結果として私は推測できません。 – Mozak

    +0

    ああ、私の推測を確認するには良い:-)残っている問題はありますか?そうでない場合は、その答えを受け入れてください。 – Bergi

    0

    コードをデバッグしましたか? 私はChromeでデバッグし、コードにいくつかのブレークポイントを追加して、実際のレスポンスを確認します。

    +0

    私はNodejsでこれを使用していますので、店を出た直後にコンソールを置くと、すべてのデータが4になります。コンソールを応答すると、カウントは4になりますが、NULL値があります。 – Mozak

    +0

    私はあなたのコードの最後の2つのキャッチに記録します。そこに失敗していないことを確認するには – funcoding

    関連する問題