posts - 22, comments - 17, trackbacks - 0, articles - 0
  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
很多时候,我们需要按照一定顺序执行一系列动作,必需保证一个动作完全执行完毕后再执行另外一个动作。解决办法很多,比如执行完一个动作就广播一个事件,再执行下一个动作。

现在我们利用Object.watch方法来实现这个目的(不熟悉相关方法的请看帮助),代码示例:

var func = [func1, func2, func3];
var listener 
= {success:false};
listener.watch(
"success", callFunc);
var i 
= 0;
exec(
0);
function exec(i) 
{
    
if (i < func.length) {
        func[i]();
    }
 else {
        lietener.unwatch(
"success");
    }

}

function callFunc(prop, oldVal, newVal) 
{
    trace(prop 
+ "{oldVal:" + oldVal + "  newVal:" + newVal + "}");
    
if (newVal == true{
        i
++;
        exec(i);
    }

    
return oldVal;
}

function func1() 
{
    var id1 
= setInterval(aa, 1000);
    function aa() 
{
        txt.text 
= "1:exec func1";
        clearInterval(id1);
        listener.success 
= true;
    }

}

function func2() 
{
    var id2 
= setInterval(bb, 1000);
    function bb() 
{
        txt.text 
= "2:exec func2";
        clearInterval(id2);
        listener.success 
= true;
    }

}

function func3() 
{
    var id3 
= setInterval(cc, 1000);
    function cc() 
{
        txt.text 
= "3:exec func3";
        clearInterval(id3);
        listener.success 
= true;
    }

}

在此例中,实现了队列执行三个函数func1,func2,func3,每个函数的动作都是间隔1s后改变txt中的文本内容。恰好,我们利用了Object.watch方法来监控success属性,每当一个func[i]执行完毕后,就会改变success为true,继而执行下一个函数。此方法比和事件侦听是同一原理,在某些情况下又更为简洁实用。
只有注册用户登录后才能发表评论。