Код, который вы опубликовали, не является синхронным, поэтому он работает правильно.
Это поток вашего кода, чтобы дать вам лучшее представление о том, что на самом деле делает код.
// myVar is declared undefined
var myVar;
// you call console.log with undefined
console.log(myVar);
// sometime later .then is called
myModule.myFunction().then(function(data){
// later you set the global variable to the data
myVar = data;
// at this point you can log the value of myVar
});
С точки зрения возвращения что-то от AJAX позвонить вы не можете сделать это синхронно, но вы можете цепи другой .then
после того как она вернулась.
myModule.myFunction().then(function(data){
// do something with the data
return data;
})
.then(function(data){
// do something else with the data
})
Вы можете сохранить сцепление then
до тех пор, как вы хотите, и есть более полезные методы, которые можно использовать для обработки ошибок, или позвонив по телефону обещание параллельно или синхронно
Вы объявляете MYVAR как неопределенные. Затем назначьте некоторые данные myVar, но в то же время console.loging myVar. Убедитесь, что журнал консоли будет запущен после myVar = data, поместив console.log в функцию .then сразу после myVar = data ** Также проверьте, чтобы данные не были неопределенными ** –
Возможный дубликат [Как мне вернуть ответ от асинхронного вызова?] (http://stackoverflow.com/questions/14220321/how-do-return-the-response-from-an-asynchronous-call) –
@BenFortune, вы даже прочитали мой вопрос ? Я уже сделал то, что говорит это решение, но после того, как обещание будет возвращено, мой контроль заблокирован в блоке «then». – Krisalay