2017-03-09 97 views
-2

中的值爲null我使用的是承諾。這是我的問題的延續herePromise.all

我遇到的問題是作爲響應,即對象數組具有空值。我會盡量解釋這個

  1. 首先,我獲取用戶標識
  2. 獲得用戶whishlist產品根據UserID
  3. 然後使用用戶id我得到商店/店鋪列表
  4. 然後我遍歷店名單和通話另一個API來檢查這家商店是否是用戶最喜歡的商店。
  5. 然後我得到每個商店的產品並追加一個對象並返回。

    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() 
    } 
    

我得到的迴應是

[{ 
     "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 
     }] 
    } 
] 

實際的商店來了爲4,但不是它空被追加。我在這裏用Promises做了什麼錯誤。

回答

0

這似乎與您的.catch(() => {}).catch(err => console.error(err))調用有關。如果循環中的某個承諾出現錯誤,它將被轉換爲undefined值(可選地在之前被報告),以便Promise.all將滿足可能包含undefined值的數組。如果你JSON.stringify那,你會得到null在這些指數。

刪除不做任何事情的.catch(() => {})語句(或將它們替換爲記錄日誌),並檢查錯誤日誌。

+0

'getProductList'調用有時會得到503,我抓住它並因此導致未定義的猜測。 – Mozak

+0

啊,好我的猜測證實:-)還有什麼問題嗎?如果沒有,請接受答案。 – Bergi

0

你有沒有調試你的代碼? 我會在Chrome上進行調試,並在代碼上添加一些斷點以查看實際響應的內容。

+0

我在Nodejs中使用它,所以我剛剛拿到控制檯後,我得到的商店,我得到所有數據4,當我把控制檯的響應,我得到計數​​4,但有一些空值。 – Mozak

+0

我會登錄到代碼的最後兩個catch。爲了確保不會失敗 – funcoding