2015-05-21 2 views
1

Я не знаю как правильно вернуть возвращаемые данные из ресурса в массив обещаний. Когда я выхожу на консоль пустым.

Вот мой код:

var d = $q.defer(); 
var promises = []; 
_.each(recipe.credentials, function(credential) { 
    APIService.save({route:'credential'},credential).$promise.then(function(data) { 
     promises.push(data) 
    }); 
}); 

$q.all(promises).then(function(data) { 
    console.log(data); 
    d.resolve(); 
}); 

return d.promise; 

Обновленный код:

var d = $q.defer(); 
var promises = recipe.credentials.map(function(credential) { 
    return APIService.save({route:'credential'},credential).$promise; 
}); 
return $q.all(promises) 
+0

Не знаю ... но он работает с .save! – nofear87

+1

Забудьте создать отложенный объект, просто 'return $ q.all (...'. Вероятно, вы захотите «вернуть данные» в обработчике 'then', если вы хотите получить доступ к нему за пределами – Phil

ответ

2

Вы должны обернуть обещания, когда они созданы, и не забывайте .catch обработчик:

$q.all(recipe.credentials.map(function(credential) { 
    return APIService.save({route:'credential'},credential).$promise; 
})).then(function(data) { 
    console.log(data); 
}).catch(function(reason) { 
    console.log(reason); 
}); 

Кроме того, скорее всего, нет необходимости создавать другое отсрочку - просто верните результат $q.all во внешний мир.

P.S. Я настоятельно рекомендую прочитать this article о обещаниях и их использовании.)

+0

Не знаете, кто downvoted вы, но они ошибаются – Phil

+0

Может быть, это ваш странный кронштейн/скобка/стиль новой строки;) – Phil

+0

Ну, это только пример. Мне было проще различать функцию mapper и callback one (поставлено в '.then'). Но в любом случае, переписал это более простым образом.) – raina77ow

Смежные вопросы