2017-09-06 2 views
1

zu warten Ich verwende .map, um ein neues Objekt zuzuordnen und den alten Preis der Karte hinzuzufügen.Versprechen {<pending>} - Versuchen, auf .map

I Async/Await bin mit mit meinen Datenzuordnungen, hier ist das, was mein Code wie folgt aussieht:

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 all Preise Veränderungen in den letzten 24 Stunden gefunden haben.

last enthält die vorherige Zeit eine Preisänderung des bestimmten Produkts gefunden wurde.

Die return products wartet nicht, so bekomme ich einen Spam von Nachrichten. Wenn ich einen benutze, funktioniert es innen, aber ich kann den richtigen Weg nicht herausfinden, den Ertrag zu verlangsamen.

products.diff = last.price ist das eine Stück, das gefüllt werden muss, damit dies gültig ist. Irgendwelche Ideen?

Antwort

3

await wartet auf Versprechen, aber Array.prototype.map gibt eine neue Reihe von Versprechen. Sie müssen es mit 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

natürlich wickeln! Danke, funktioniert perfekt. Ich habe eine Wartezeit, dann stelle ich deine als die beantwortete Frage. –

+1

@MilesCollier Kein Problem :) –

Verwandte Themen