2017-09-06 140 views
1

我正在使用.map来映射出一个新对象并将旧价格添加到地图。Promise {{0}}试图等待.map

我使用异步/等待我的资料地图,这里是我的代码如下所示:

let datasets = await changes.map(async (data) => { 
    let products = {}; 
    let last = await models.prices.findOne({ 
    where: { 
     productId: data.productId, 
     sourceId: data.sourceId 
    }, 
    order: [['createdAt', 'DESC']], 
    limit: 1, 
    offset: 1 
    }); 

    products.name = data.product.name; 
    products.price = data.price; 
    products.sku = data.product.sku; 
    products.source = data.source.name; 
    products.link = data.link; 
    products.diff = last.price; 


    return products; 
}); 

changes都是在过去24小时内发现的价格变化。

last包含上次发现特定产品的价格变化。

return products没有等待,所以我收到一封垃圾邮件Promise { <pending> }消息。如果我使用console.log(last)它正在内部工作,但我无法弄清楚减缓回报的正确方法。

products.diff = last.price是需要填写的一个部分,以使其有效。有任何想法吗?

回答

3

await等待在承诺但Array.prototype.map返回一个新的承诺阵列。你需要把它包起来Promise.all

let datasets = await Promise.all(changes.map(async (data) => { 
    let products = {}; 
    let last = await models.prices.findOne({ 
    where: { 
     productId: data.productId, 
     sourceId: data.sourceId 
    }, 
    order: [['createdAt', 'DESC']], 
    limit: 1, 
    offset: 1 
    }); 

    products.name = data.product.name; 
    products.price = data.price; 
    products.sku = data.product.sku; 
    products.source = data.source.name; 
    products.link = data.link; 
    products.diff = last.price; 


    return products; 
})); 
+0

当然!谢谢,完美的作品。我有一段等待时间,然后我把你的问题作为答案。 –

+1

@MilesCollier没问题:) –