如何实现Javascript延迟执行后续代码?

具体问题是这样的。比如我有一段JS代码:......target();......我希望在target函数执行之前,等待countdown毫秒。换句话说,在执行targe... 具体问题是这样的。
比如我有一段JS代码:
......
target();
......
我希望在target函数执行之前,等待countdown毫秒。
换句话说,在执行target函数之前,中断countdown毫秒,期间不做任何事情。等countdown毫秒的时间过去之后,继续执行target函数。

注意此处countdown是一个变量,也就是说我并不知道具体要延迟多少时间,这个延迟的具体时间是在JS执行过程中才被确认的。

谢!
展开
 我来答
百du74
2012-10-28
知道答主
回答量:1
采纳率:0%
帮助的人:1572
展开全部
噗。。
1. 我是提问者,很感谢大家的帮助。
2. 今天想了想,已经解决了这个问题了,等会儿会放上来解决方法。
3. 感谢@草薙在 你的建议我会考虑,不过JS的运行机制我有学过的,你说的我也知道。正因为如此,所以没有“显而易见的”解决方法,所以才要动脑筋思考不是~
4. 感谢@hyjiacan 虽然你没有解决我的问题。target()只不过是一个代号,意味着后面还有很多代码,并不是一个具体的函数呢。
5. 感谢@三间北房 你的方法我知道的,这样确实可以实现“暂停”。不过如果后续代码有很多很多行,这样处理就不合适了~
6. 感谢@ghp120 你的方法是另一个思路,回头可以试一试,或者你可以放上来你测试通过的代码~
以下是我的解决方案:

思路:
setInterval和setTimeout不同之处,一方面在于setInterval将会不断地重复执行代码而setTimeout只是执行一次,另一方面在于JS并不会再setTimeout处暂停而等待setTimeout中的代码执行,却会在setInterval处暂停,不断重复执行其中的代码。
此外,setInterval的一个特性是第一次执行的时候,也会等待一个时间,而不是立即执行。
所以我们要做的就是使用setInterval,并且让它只执行一个循环。

代码:
……
var CD;
function sleep(){clearInterval(CD);}
CD = setInterval("sleep()", countdown);
target()
……

=============================================
以上~
miniapp2S0kX4aPdBeON
推荐于2016-01-04 · TA获得超过753个赞
知道小有建树答主
回答量:750
采纳率:0%
帮助的人:633万
展开全部
用setTimeout是有些局限性,是一个并发执行。
最完备的方法应该是触发机制,判断上一个方法结束后执行target,或者执行setTimeout(target, countdown),而且后续的方法由target中判断执行完毕后执行,就基本实现了你的要求。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
三间北房
2012-10-27 · TA获得超过1311个赞
知道小有建树答主
回答量:629
采纳率:66%
帮助的人:516万
展开全部
你当js可以sleep吗?
想实现这个功能必须自己设计好脚本的执行,js不会停下来的,除非执行完了,或者有alert什么的。好好设计一下结构,应该可以满足你的要求

比如:
setTimeout(next, countdown);

function next(){
target();
......
其他内容的脚本
......
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
草薙在
2012-10-27 · TA获得超过4795个赞
知道大有可为答主
回答量:6187
采纳率:50%
帮助的人:6319万
展开全部
必须要用setTimeout,setTimeout里执行target然后再用setTimeout放后续代码
追问
并不行。
设置了setTimeout,并不会在此处暂停,等待countdown倒计时结束再执行target。而是从此时开始,计时countdown,同时执行后续代码。等到countdown到时的时候,执行target。这与要求不符。

另外,事实上如果没有target这个函数,这个方法就失效了。
我需要的是在此处暂停,什么也不做,然后在执行target(或者其他的代码)。
追答
抱歉,javascript不提供操作线程阻止举行的行为,或者你可以用while(true){}阻塞等待,但是会使浏览器停止响应。

建议你去学一下javascript的运行机制。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hyjiacan
2012-10-27 · TA获得超过3912个赞
知道小有建树答主
回答量:894
采纳率:100%
帮助的人:1088万
展开全部
setTimeout(target, countdown);

一般来说,这样是可以的
追问
并不行。
设置了setTimeout,并不会在此处暂停,等待countdown倒计时结束再执行target。而是从此时开始,计时countdown,同时执行后续代码。等到countdown到时的时候,执行target。这与要求不符。
追答
后续代码由target触发。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式