Возврат нескольких независимых от данных обещаний ресурса

0

По этой ссылке я нашел пример возврата нескольких обещаний ресурсов (строки 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 с идентификатором вернул обещание.

спасибо

Теги:
angular-promise
angular-resource

1 ответ

1
Лучший ответ

Во-первых, я предлагаю вам немного почитать о обещаниях, поскольку они потрясающие :)

Что касается вашего вопроса, то то, что вы хотите сделать, - это целая цепочка. Обратите внимание, как вы используете функции .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);
    });
});

Теперь есть более приятные способы написать выше, но, надеюсь, это объясняет вам целую цепочку.

  • 0
    Привет, спасибо за ответ. Поскольку я использую «решимость», он ожидает, что я верну обещание. Я хочу вернуть обещание, содержащее данные обоих вызовов, возможно ли это?
  • 0
    Да уж. Я обновил ответ. Вы просто возвращаете обещание, возвращаемое then() , и оно разрешится после завершения цепочки. В этом весь смысл обещаний.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню