2016-09-12 16 views
13

Có một mảng của các đối tượng [obj1, obj2]Sử dụng chức năng hứa hẹn bên Javascript mảng bản đồ

Tôi muốn sử dụng Bản đồ chức năng để thực hiện một truy vấn DB (có sử dụng lời hứa) về tất cả chúng và đính kèm các kết quả của truy vấn cho từng đối tượng.

[obj1, obj2].map(function(obj){ 
    db.query('obj1.id').then(function(results){ 
    obj1.rows = results 
    return obj1 
    }) 
}) 

Tất nhiên điều này không làm việc và các mảng đầu ra là [undefined, undefined]

cách tốt nhất để giải quyết vấn đề như thế này là gì? Tôi không quan tâm sử dụng các thư viện khác như async

+0

Câu hỏi này không được đánh dấu trùng lặp. Câu hỏi này đặc biệt về cách sử dụng lời hứa bên trong 'map', _not_ async hoạt động như thế nào nói chung. – Rohmer

Trả lời

25

Map mảng của bạn để lời hứa và sau đó bạn có thể sử dụng chức năng Promise.all():

var promises = [obj1, obj2].map(function(obj){ 
    return db.query('obj1.id').then(function(results){ 
    obj1.rows = results 
    return obj1 
    }) 
}) 
Promise.all(promises).then(function(results) { 
    console.log(results) 
}) 
+0

Chết tiệt, tôi quên mất Promise.all! Cảm ơn :) – Jorge

+0

Cảm ơn bạn giao phối, bạn chỉ cần lưu ngày của tôi. :) –

2

You are not trở Promises của bạn bên trong map chức năng.

[obj1, obj2].map(function(obj){ 
    return db.query('obj1.id').then(function(results){ 
    obj1.rows = results 
    return obj1 
    }) 
}) 
Các vấn đề liên quan