Как лучше всего связать обещания при использовании решимости Angular: {}?

0

Я использую угловатое решение и хотел бы связать два обещания. Каков наилучший способ обойти это? По сути, я хочу:

resolve: {
    my_two_lists: function() {
    return MyService.list().then(function(array1) {     
         return MyOtherService.list().then(function(array2) { 
               return new Promise(function(resolve, reject) { 
                    resolve(array1.concat(array2)); 
               }); 
          }); 
       });
    }
}

Другими словами: у меня есть 2 службы, каждая из которых имеет два метода, называемых "список", которые возвращаются, а также обещание, которое разрешает списки. Я хотел бы объединить два полученных обещания.

Теги:
angular-promise

1 ответ

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

Что-то, что я узнал с обещаниями Javascript - если у вас более одного уровня гнездования, будет лучший способ.

Здесь более чистое решение, в котором вы вызываете две команды list в parralel.

resolve: {
    my_two_lists: function() {
            return Promise.all([MyService.list(), MyOtherService.list()])
                   .then(function(values) {
                        return values[0].concat(values[1]));
                   });
    }
}

Если по какой-то причине вы хотели называть их один за другим, то ваш пример правильный, за исключением того, что нет необходимости возвращать еще одно обещание. Просто верните значение. Результат my_two_lists прежнему будет обещанием, которое разрешает конкатенацию двух массивов.

resolve: {
    my_two_lists: function() {
    return MyService.list().then(function(array1) {     
         return MyOtherService.list().then(function(array2) { 
               return array1.concat(array2);
          }); 
       });
    }
}
  • 0
    Большой! Большое спасибо!

Ещё вопросы

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