2015-08-25 2 views
-2

Браузер может обрабатывать скрипты перед запросом на отправку сообщения. Conside У меня есть следующий образецБраузер может обрабатывать скрипты перед отправкой по почте

if (some true condition) { 
    console.log("ready to post") 
    restangular.all.post(RequestData).then(function(response){ 
     //some post methods 
     console.log("response") 
    });  
} 
//then containing scripts 
cosole.log('Hello') 
.... 

выход

готов к сообщению Привет ответ

Я ожидаю, чтобы сделать запрос POST перед печатью "Hello". Как преодолеть это?

+1

Положите 'Hello' рядом с 'response' ?! Выполнение * асинхронного * происходит так, как есть, так оно и работает, поэтому есть такие вещи, как '.then' ... – deceze

+1

Можете ли вы перефразировать этот вопрос, пожалуйста? Я не уверен, что вы спрашиваете. – ScarletMerlin

ответ

3

Для достижения желаемого результата вы должны изучить angularJS обещает, так как запрос POST является асинхронным. Например проверить эту ссылку: http://www.webdeveasy.com/javascript-promises-and-angularjs-q-service/

Основная идея состоит в том, чтобы сначала создать вызов, который возвращает объект отложила, что-то вроде

this.myFunction = function (myForm) { 
    var deferred = $q.defer(); 
    $http.post(myURL, myForm) 
     .success(function (data) { 
      //resolve the promise 
      deferred.resolve('SUCCESS'); 
     }) 
     .error(function (data) { 
      //reject the promise 
      deferred.reject('ERROR'); 
     }); 

    //return the promise 
    return deferred.promise; 
} 

, а затем вызвать его, как

var myPromise = this.myFunction ($scope.modalForm); 
    // wait until the promise return resolve or eject 
    //"then" has 2 functions (resolveFunction, rejectFunction) 
    myPromise.then(function(resolve){ 
     // do stuff here, the post request is successfully finished 
    }, function(reject){ 
     return; 
    }); 

В качестве альтернативы, любой код, который вы хотите выполнить после запроса POST, вы можете поместить его в успех функции запроса.