2016-05-21 4 views
0

Вид утерянных при переборе над обещаниями, им пытаются превратить это:обещают отображение массив объектов с массивом значений

[{ 
' site' : ['url', 'url', 'url'] 
}, 
{ 
' site' : ['url', 'url', 'url'] 
}] 

так, что она становится:

[{ 
'site' : [{ 'url' : result_of_function }, { 'url' : result_of_function }, { 'url' : result_of_function }] 
}, 
{ 
    'site' : [{ 'url' : result_of_function }, { 'url' : result_of_function }, { 'url' : result_of_function }] 
}] 

До сих пор я создал функцию ниже, но по какой-либо причине checkBranding не вызывается.

function searchPageArray(brand, siteObjArr) { 

    return Promise.map(siteObjArr, function(sitesObj){ 

    var k = Object.keys(sitesObj)[0] 
    var urlArr = sitesObj[k]; 

    return Promise.map(urlArr, function(url){ 

     return searchPage(url).then(function(html){ 

      var tempObj = {} 

      tempObj[url] = checkBranding(url, html, brand) 

      return tempObj 

      }) 
     }) 

    return sitesObj; 

}) 

}

Спасибо за помощь!

ответ

0

bluebird.jsprops() метод.

// You must use bluebird to achieve this 
var Promise = require('bluebird'); 

function searchPageArray(brand, siteObjArr) { 

    return Promise.map(siteObjArr, function (sitesObj) { 

     var k = Object.keys(sitesObj)[0]  
     var urlArr = sitesObj[k]; 

     return Promise.map(urlArr, function (url) { 

      return searchPage(url) 
       .then(function (html) { 
        // Use promise.props(). It resolves all properties of a 
        // object before returning. If there are any properties that 
        // arent promises they are returned as normal. 
        return Promise.props({ 
         url: checkBranding(url, html, brand) // Assuming checkBranding() returns a promise. 
        }); 
       }); 
     }); 

     return sitesObj; 

    }); 
} 
Смежные вопросы