2014-12-12 2 views
0

Я создал приложение в angularjs обещании, в котором я вызываю метод, в котором будет вызван вызов сервера, я пообещал включить вызов сервера, вызов сервера выполнение займет некоторое количество времени, после завершения он будет возвращать отложенный объект, все хорошо, но обещание возвращается до вызова сервера будет завершенУгловое обещание возвращается до завершения вызова сервера

Я макетом подобного сценария в JSFiddle

function getServerCall() { 
    var deferred = $q.defer(); 
    setInterval(function() { 
      $scope.$apply(function() { 
       deferred.resolve({ 
        "success": true 
       }); 
      }); 
    }, 3000); 

    return deferred.promise; 
} 

console.log(JSON.stringify(getServerCall().success)); 
if (getServerCall().success) 
{ 
    console.log('Success'); 
} 
else{ 
    console.log('Failed'); 
} 

ответ

2

Обещание всегда возвращается d синхронно. То, что вы хотите (я думаю), должно решить разрешенные обещания.

Таким образом, вы должны использовать .then (который является доступным методом на обещание):

getServerCall() 
    .then(function(result){ 
    if (result.success) { 
     console.log("success"); 
    } else { 
     console.log("failed") 
    } 
    }); 
+0

еще его не синхронные право ... проверить это [JSFiddle] (http://jsfiddle.net/ jx2sqzgs/1 /) 'Second Execution' печатает в первую очередь, как мы можем заблокировать весь процесс до тех пор, пока этот вызов не будет выполнен. –

+0

Javascript является однопоточным ([в сторону края] (http://stackoverflow.com/questions/2734025/ это-Javascript гарантируемый-быть-однопоточным)). Итак, '. Then' регистрирует обработчик и возвращается синхронно. Затем вызывается 'console.log (« Второе исполнение »)'. Вы не можете остановить выполнение (если можно, это заморозит ваш браузер) –

+0

см. В jquery-ajax, у нас есть функция [async] (http://stackoverflow.com/questions/20209097/what-is-the- разница между-asyncfalse-and-asynctrue-in-jquery-ajax/20209122 # 20209122) для блокировки всего, пока процесс не будет успешно выполнен, так что у нас есть что-то подобное в угловом –