По этой ссылке я нашел пример возврата нескольких обещаний ресурсов (строки 44-52):
http://embed.plnkr.co/LZad4ZyEYjrbKiTPbAwu/script.js
var GistsData = Gists.query();
var MetaData = Meta.get();
GistsData.$promise.then(function(response) {console.log('Resource 1 data loaded!')});
MetaData.$promise.then(function(response) {console.log('Resource 2 data loaded!')});
return $q.all([GistsData.$promise, MetaData.$promise]);
В моем случае второй вызов API ресурсов (MetaData) зависит от определенного значения, которое возвращается первым вызовом API ресурсов (GistsData).
Я пытаюсь выяснить, как я могу использовать значение, возвращаемое GistData (например, ID) в ресурсе MetaData? Как это:
var MetaData = Meta.get({ id : GistsData.id });
Я хочу вернуть обещание после того, как MetaData с идентификатором вернул обещание.
спасибо
Во-первых, я предлагаю вам немного почитать о обещаниях, поскольку они потрясающие :)
Что касается вашего вопроса, то то, что вы хотите сделать, - это целая цепочка. Обратите внимание, как вы используете функции .then()
для каждого из обещаний ресурса. then()
вызывается после того, как обещание разрешилось, что в вашем случае есть, когда запросы вернулись.
Поэтому вместо того, чтобы запускать каждый из них самостоятельно, используйте функцию then()
первого обещания, чтобы затем запустить вторую. Например:
return Gists.query().$promise.then(function(response){
// Gists has finished and the data it returned is in response
// Now run your second query, using the response from the first
return Meta.get({ id : response.id }).$promise.then(function(nextResponse){
// Now nextResponse will contain the result of Meta.get(), having used the id that returned from the first response
console.log(nextResponse);
});
});
Теперь есть более приятные способы написать выше, но, надеюсь, это объясняет вам целую цепочку.
then()
, и оно разрешится после завершения цепочки. В этом весь смысл обещаний.