2015-07-31 6 views
0

У меня есть функция и цикл:Получить результат использовать для цикла

var songs = Musics.searchSongs(query).then(function(rs) { 
    return rs; 
    }); 
    for (var i = 0; i < songs.length; i++) { 
    console.log(songs[i]); 
    } 

Теперь я хочу, чтобы запустить цикл с результатом, который взят из после выполнения функции. Как я могу это сделать?

+2

Вы не можете вернуться из асинхронного метода – epascarello

+0

вы должны сделать это в самой функции ... Как вы уже догадались, что это асинхронная. В качестве альтернативы вы можете использовать библиотеку типов $ q для делегирования успеха – binariedMe

+0

переместить цикл for внутри, а затем обратный вызов и зацикливать объект rs –

ответ

1

Вы не можете вернуться из асинхронного вызова. Однако вы можете передать функцию обратного вызова асинхронному вызову и передать результат вызова этой функции обратного вызова.

Итак, в вашем случае вы можете создать функцию, которая получает массив песен, и циклически перемещается по каждой песне, записывая каждый на консоль. Затем вы передадите эту функцию в качестве параметра для вашего асинхронного вызова.

function callback(songs) { 
    for (var i = 0; i < songs.length; i++) { 
     console.log(songs[i]); 
    } 
}; 

Musics.searchSongs(query, callback).then(function(rs) { 
    callback(rs); 
};