AS2.0:利用Object.watch来控制函数执行队列
很多时候,我们需要按照一定顺序执行一系列动作,必需保证一个动作完全执行完毕后再执行另外一个动作。解决办法很多,比如执行完一个动作就广播一个事件,再执行下一个动作。
现在我们利用Object.watch方法来实现这个目的(不熟悉相关方法的请看帮助),代码示例:
[code]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;
}
}[/code]
在此例中,实现了队列执行三个函数func1,func2,func3,每个函数的动作都是间隔1s后改变txt中的文本内容。恰好,我们利用了Object.watch方法来监控success属性,每当一个func[i]执行完毕后,就会改变success为true,继而执行下一个函数。此方法比和事件侦听是同一原理,但更为简洁实用。