2016-11-16 3 views
0

У меня есть массив http-запросов, которые я использую в Promise.all. Проблема заключается в том, что когда Promise.all выполняется, console.log(values); показывает исходный массив dealers вместо разрешенного объекта ответа HTTP-запросов. Почему я не получаю разрешенные http-запросы в Promise.all?

function getDealer(regionMarketDealer) { 
    var params = { 
     url: API_BASE_URI + 'service/ppv/' + regionMarketDealer, 
     method: 'GET' 
    }; 

    return $http(params); 
    } 

function getAllMarketDealers(dealers) { 
    var dealerHttpRequests = dealers.filter(function(dealer) { 
    if (dealer.name !== 'All') { 
     var promise = getDealer(dealer.name); 
     return promise; 
    } else { 
     return false; 
    } 
    }); 

    Promise.all([dealerHttpRequests]) 
    .then(function(values) { 
     console.log(values); 
    }); 
} 
+0

У вас есть массив массивов там? – Bergi

+0

ya, я понял, что и удалил массив – dman

ответ

1

.filter используется для фильтрации массива, возвращая истинным или ложным в функции и затем создает новый массив с отфильтрованный результат.

Если после этого вы хотите создать обещания отфильтрованного массива, то вы должны использовать .map и вернуть обещание

function getDealer(regionMarketDealer) { 
    var params = { 
     url: API_BASE_URI + 'service/ppv/' + regionMarketDealer, 
     method: 'GET' 
    }; 

    return $http(params); 
    } 

function getAllMarketDealers(dealers) { 
    var dealerHttpRequests = dealers.filter(function(dealer) { 
     return dealer.name !== 'All'; 
    }) 
    .map(function(dealer) { 
     return getDealer(dealer.name); 
    }); 

    Promise.all(dealerHttpRequests) 
    .then(function(values) { 
     console.log(values); 
    }); 
} 
Смежные вопросы