Я понимаю использование ".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);
};
Вы захотите сделать это
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 сразу, скорее, в результате решения предыдущего обещания