2014-07-24 4 views
17

그냥 setTimeout에서 반환 값을 가져오고 싶지만 함수의 전체 텍스트 형식은 무엇입니까?setTimeout에서 반환 값 얻기

function x() { 
    setTimeout(y = function() { 
     return 'done'; 
    }, 1000); 
    return y; 
} 

console.log(x()); 
+0

수행 여부, 그것은 단지 기능을 반환합니다 알고 발생한 후 더

var y="notdone"; setTimeout(function() { y="done"; }, 1000); 

당신은 변수 y를 액세스 할 수 없습니다. – Mritunjay

+0

"완료"를 반환 하시겠습니까? 함수의 결과를 어떻게 반환 할 수 있습니까? 1000 ms 후에 호출됩니다. –

+0

시간 제한은 비동기식이므로 반환 할 수 없습니다. (글쎄, 할 수는 있지만 반환 값은 아무 곳에도 없다) – Ferdi265

답변

29

당신은 이것을 위해 약속을 사용해야합니다. 그들은 available in ES6하지만 quite easily을 polyfilled 할 수 있습니다

function x() { 
    var promise = new Promise(function(resolve, reject) { 
    window.setTimeout(function() { 
     resolve('done!'); 
    }); 
    }); 
    return promise; 
} 

x().then(function(done) { 
    console.log(done); // --> 'done!' 
}); 
+0

실제로 내 예제에서'done'은 setTimeout 내부에서 반환 될 필요가있는 약속이었습니다. 왜냐하면 setTimeout 내부에서 반환 된 deferred.resolve()를 얻을 수 없기 때문입니다. 어떻게 될까요? 감사합니다 – Vainglory07

+1

질문에 코드의 명확한 예를 게시 할 수 있습니까? –

4

전달 함수에서 반환 값을 setTimeout으로 가져올 수 없습니다.

setTimeout (예제에서 x) 함수는 setTimeout에 전달되는 함수가 호출되기도 전에 실행 및 반환을 마칩니다.

당신이 얻은 가치로 무엇을 하든지간에, 당신은 setTimeout에 전달하는 함수에서 그것을 할 필요가 있습니다.

function x() { 
    setTimeout(function() { 
     console.log("done"); 
    }, 1000); 
} 

x(); 
+0

멋지고 정확한 설명! –

1

더 나은 기능 x하고 어떤 작업 당신이 콜백을 보내 그 시간 종료 후 수행 할에 대한 콜백을 위해 : 당신의 예에서

, 즉는 다음과 같이 기록 될 것입니다.

0

난 당신이 더 발생 또는 이벤트를 알 수있는 플래그를 갖고 싶은 생각합니다. setTimeout은 값을 반환하지 않습니다. 당신은 이벤트가 발생 감지 변수를 사용하거나 시간 제한이 구문은 그런 식이다