2016-06-09 2 views
4

Я хочу подождать, пока мое значение не вернется в java-скрипте.Как сделать функцию wait до возвращаемого значения?

я попытался ниже код он не работает для меня

код:

calculate().done(function(result) { 
    alert(result); 
}); 
+0

Можете ли вы показать еще какой-нибудь код? И некоторый рабочий код для проверки – Shrabanee

+4

Что такое 'calculate()'? Что такое 'done()'? Вы используете библиотеку? – evolutionxbox

+1

Это именно то, что функции JavaScript выполняют в общих чертах, потому что JavaScript в основном предназначен для синхронного и однопоточного. Чтобы иметь возможность использовать асинхронные функции и несколько потоков, вам нужно делать очень конкретные вещи - не делайте их, если они вам не нужны. –

ответ

5

Если высчитывает ваша функция, вы можете использовать отложенный объект. Через 2 секунды выполняемая функция должна срабатывать.

var calculate = function() { 
 
    var deferred = new $.Deferred(); 
 
    var test_data = "Hello World!" 
 

 
    // SIMULATE SOME TIME TO PROCESS FUNCTION 
 
    setTimeout(function() { 
 
     // This line is what resolves the deferred object 
 
     // and it triggers the .done to execute 
 
     deferred.resolve(test_data); 
 
    }, 2000) // AFTER 2 SECONDS IT WILL RETURN 
 
    
 
    return deferred.promise(); 
 
} 
 

 
calculate().done(function (result) { 
 
    alert(result) 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

2

Предполагая, что простой код.

Попробуйте так: -

function calculate(callback) 
{ 
    var a = 1+2; 
    console.log(a); 
    //Don't forget to give the calculated value to the callback function 
    callback(a); //Once you are done do `callback()` 
} 

calculate(function(result) 
{ 
     alert(result); 
}); 
+0

Мне очень нравится синтаксис OPs. Почему бы нам не показать, как можно вызвать обратный вызов, используя синтаксис '.done'? – evolutionxbox

+0

@evolutionxbox Раньше я использовал свой код только выше. Я никогда не использовал обратный вызов с синтаксисом '.done'. :( – Shrabanee

+1

Aw. Иногда вы не можете передавать обратный вызов в качестве аргумента. В этих случаях синтаксис '.done' был бы полезен. – evolutionxbox

3

Вы можете использовать вместо этого обещания.

function calculate() { 
    return new Promise((resolve, reject) => { 
     var a = 1+2; 
      console.log(a); 
     resolve(a) 
     }) 
} 
calculate().then(function(res){ console.log(res)}) 
+0

Будет работать только с AngularJS. – Gopal00005

+1

Это будет работать с ecmascript 6. и будет работать в любом контексте – Abiodun

Смежные вопросы