2017-02-09 123 views
0

我想返回,這將是這個樣子回報的承諾,而不是異步

[ 
    shops: { 
    id, 
    products:[{Object}, {Object}] 
    }, 
    shops: { 
    id, 
    products:[{Object}, {Object}] 
    } 
] 

的資料,因此我有我需要遍歷並獲得產品的每家店鋪,並追加其店鋪ID的列表,然後返回。

我就是這樣做了

const shops = response.data 
const respToSend = [] 
async.eachSeries(shops, (shop, callback) => { 
    const id = shop.shop_id 
    const shopObj = { 
    id 
    } 

    // Fetch products of each Shop. 
    getProductList(id) 
    .then((responseData) => { 
     shopObj.products = responseData.data.products 
     respToSend.push(shopObj) 
     callback() 
    }) 
    .catch(() => { 
    }) 
},() => { 
    return respToSend 
}) 

正如你可以看到,我使用異步節點模塊做異步任務,但應用程序從我需要返回響應,承諾其將被以其它方式解決它打印空。我如何使用承諾實現這一目標?我對諾言很陌生,對於任何錯字都很抱歉。

+0

你是混合承諾asynchjs - 將會以悲劇告終 –

+0

是要求作出順序的要求? – guest271314

回答

2

嘗試Promise.all(iterable)

Promise.all(shops.map(shop => getProductList(shop.shop_id) 
    .then(products => ({id: shop.shop_id, products})) 
    .then(/* actions for each shop */)) 
    .then(shops => { 
    /* actions for array of shop objects */ 
    respToSend = shops; 
    })