Existem vários erros aqui:
1) Os arrays não devem ser iterados assim:
for(i in ['...','...'])
Quando você faz isso, i
será o índice na matriz, não no item da matriz. E, iterar-se-á através das propriedades do objeto, que por vezes podem ser mais do que apenas elementos de matriz. Você deve iterar elementos de matriz com:
for (var i = 0; i < array.length; i++) {
// process array[i]
}
ou com .forEach()
:
array.forEach(function(item, index) {
// process item here
});
2) Eu mesmo não sei a API do FB, mas não vejo nenhuma documentação que FB.api()
retorne uma promessa. $.when()
só funciona com promessas.
3) Quando você está acumulando itens em friendsRequest
, está criando um objeto, não uma matriz. Assumindo que friend.id
é uma string, friendsRequest[friend.id]
define a propriedade de um objeto, não um elemento de matriz.
4) Se você quiser usar uma matriz real com $.when()
(depois de ter corrigido outras coisas para realmente ter uma matriz), $.when()
espera ser chamado assim:
$.when(p1, p2, p3, p4)
onde p1 ... p4 são promessas. Portanto, se você tiver uma série de promessas, poderá chamar $.when()
da maneira apropriada ao fazer isso:
$.when.apply($, arrayOfPromises)