在javascript中同步代码,等待事件完成

时间:2014-07-28 09:09:42

标签: javascript jquery

one附近有问题。 在某个地方,我对文件输入有一个绑定:

var file;

function initLoadImg(){
    $('#test').on('change', function() {
        file = event.target.files;
        // block 1
        console.log("hello");
        center.html('<span id="Tamb">25°C</span>');
        over = true;
    });
}

我用另一个javascript函数触发它:

var over = false;
var center;
function loadImg(){
    var elem = $('<div class="widget simpleimgchart center"><div class="matable"><div class="center"></div></div></div>');
    center = elem.children().children();
    $("#test").trigger('click'); 
    passIfOver();
    // block 2
    console.log("bye");
    return elem;
}

function passIfOver() {
    if (over) {
         return;
    } else {
         setTimeout(passIfOver(), 1000);
    }
}

这样,我就能在控制台的“再见”之前看到“你好”。 但是我真的不喜欢这个解决方案,(它不干净),用户可能需要等待1秒才能获得任何反馈。 是否有另一种方法可以确保在点击回调结束后执行返回元素?

编辑:我的代码甚至不起作用,因为setTimeout,我失去​​了约束......

编辑2:我的目标是在部件代码2之前执行部件代码1.我不希望我的函数loadImg()在代码1完成执行之前返回。

2 个答案:

答案 0 :(得分:0)

我建议您查看PubSub模式(http://davidwalsh.name/pubsub-javascript)。

答案 1 :(得分:0)

只需在触发器功能中移动返回:

var over = false;
function loadImg(){
    var elem = $('<div class="widget simpleimgchart center"><div class="matable"><div class="center"></div></div></div>');
    var center = elem.children().children();
    $("#test").trigger('click', function(){
        center.html('<span id="Tamb">25°C</span>');

        return elem;
    });  
}

.trigger的第二个参数是一个回调函数,其中的所有内容都将在触发器完成后执行。