Цепочка HTTP-постов обещает угловой не по порядку

0

Я понимаю использование ".then" для объединения обещаний, но приложение, которое я создаю, все равно не срабатывает последовательно.

dataFactory.getFirst().then(function(resp3){
       //handling of resp
        console.log('one');

    }).then(dataFactory.doSecond(val).then(function(resp) {
       //handling of resp
        console.log("two");

    })).then(dataFactory.getThird().then(function(resp2) {
        //handling of resp
        console.log("three");

    })).then(function(){
      $state.go('tab.main'); //goes to main page
    });

'DataFactory. все мои методы HTTP-почты, вызванные в моих службах.js. Я понимаю, что я не включил обработку исключений/сбоев, так как я перекодировал все свои коды (без обещаний) на это с нуля. Я добавлю их, как только я исправил эту проблему.

Иногда проблема заключается в том, что значения "getThird()" будут сначала напечатаны на консоли, а затем значения "doSecond()", чего я не хочу. Любые рекомендации и предложения будут глубоко оценены.

Обновление: даже учитывая ответы "@Jaromanda X", я все еще не могу добиться последовательной цепочки. Консоль не печатает "один, два, три" в последовательности. Это связано с задержкой ответа сервера?

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

var resp; var resp2; var resp3;

(resp3 =dataFactory.getFirst(valone))
.then(function(resp3){
    console.log('one');
})
.then(resp = dataFactory.doSecond(val))
.then(function(resp) {
    //handling of resp
    console.log("two");
})
.then(resp2 = dataFactory.getThird(valtwo))
.then(function(resp2) {
    //handling of resp
    console.log("three");
}).then(function(){
    $state.go('tab.main'); //goes to main page
});

doSecond (val) все функции похожи на это, только другой адрес и разные возвращаемые значения:

dataFactory.doSecond= function(val){
    var config = {
        headers:  {
            'Content-Type': 'application/x-www-form-urlencoded'
        }
    }

var data = 'val=' + val;
var httpAddressdoSecond = "http://"+IPAddress+"/webserviceURL";

return $http.post(httpAddressdoSecond, data, config);

};
Теги:

1 ответ

2

Вы захотите сделать это

dataFactory.getFirst()
.then(function(resp3){
    console.log('one');
})
.then(dataFactory.doSecond)
.then(function(resp) {
    //handling of resp
    console.log("two");
})
.then(dataFactory.getThird)
.then(function(resp2) {
    //handling of resp
    console.log("three");
}).then(function(){
    $state.go('tab.main'); //goes to main page
});

Поскольку вы это делаете, вы вызываете doSecond, getThird сразу, скорее, в результате решения предыдущего обещания

  • 0
    Я попробую! Держись, спасибо!
  • 0
    Мой «респ» становится неопределенным после следования вашему методу, есть идеи?
Показать ещё 3 комментария

Ещё вопросы

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