@r2sada2r

Как добиться ожидания результата функции в операторе if?

function testFunc() {
	async.series([
		function(down) {
			setTimeout(function(){
				down();
			}, 10000);
		}
	],
	
	function() {
		return true;
	});
};

if(testFunc()) console.log('Result function: true');
else console.log('Result function: false');


После запуска, получаю: Result function: false
Оно и понятно, т.к. return true; в testFunc, наступит только через 10 сек.

Как заставить оператор if, ждать результат функции testFunc?
  • Вопрос задан
  • 300 просмотров
Решения вопроса 1
DIITHiTech
@DIITHiTech
Fullstack javascript developer
Почитайте о обещаниях...(promises) тогда можно будет упростить :

var testFunc=new Promise(function(resolve,reject){

           setTimeout(function() {
               //down();
               resolve();
           }, 10000);

       });


       testFunc.then(function(){
           console.log('Result function: true');
       },function(err){
            console.log('Result function: false');
       });


или
function  testFunc(){
           return new Promise(function(resolve,reject){
             setTimeout(function() {
               //down();
               resolve();
             }, 10000);

           });
       }

       testFunc().then(function(){
           console.log('Result function: true');
       },function(err){
            console.log('Result function: false');
       });
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@lavrok
Front-End Developer
Можно сделать и полностью синхронный вид этого всего с помощью генераторов (плюс promises).
В ноде уже можно смело использовать, плюс избавления от безграничной вложенности и геморойного дебагинга.
habrahabr.ru/sandbox/67590
Ответ написан
Комментировать
Если попроще и без коллбэков, то перенести этот оператор внутрь функции. Ну а вообще, гуглите «Асинхронный JS».
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы