异步调用和更新变量

时间:2014-07-27 15:57:53

标签: javascript asynchronous callback

考虑以下javascript代码段 -

        var x;
        asyncFunction();
        syncFunction();            

        function syncFunction() {
            console.log(x);
        }


        function asyncFunction() {  
            // any async call or an ajax call
            //setTimeout(function () {
            //    x = 5;                        
            //}, 1000);                
        }

x变量的值未定义,因为异步函数需要一些时间才能执行。假设我没有自由使用Promise / deferreds,pub-sub而且,我不应该改变上面片段中异步和同步调用的执行顺序,我怎样才能实现正确的值x正确记录?这是最近向我询问的一个面试问题。

1 个答案:

答案 0 :(得分:2)

异步函数应该在异步函数完成时调用任何意思 - 回调函数。

var x;
asyncFunction(syncFunction); // Pass the function as a callback      

function syncFunction() {
    console.log(x);
}


function asyncFunction(callback) {  
    // using your example
    setTimeout(function () {
        x = 5;
        callback();              
    }, 1000);                
}