JS可以做Sleep吗?

xxccccxxxewe 2010-06-28 02:04:40
我现在做一个页面的功能,

由于执行速度的不同,造成结果还没有算出来就返回了,

JS能不能做SLeep的,或者让它必须先算出来再返回。

我现在是用一个死循环来控制。这个如果算结果很慢的情况下CUP使用率会达到100%,并且页面会有提示“该页上的脚本造成Internet Explorer运行速度慢“。

求解决方法 。
...全文
25280 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
mykelly6 2010-06-29
  • 打赏
  • 举报
回复
jQuery的quene可以很好的解决调用的先后问题。


$(document.body).click(function () {
$("div").show("slow");
$("div").animate({left:'+=200'},2000);
$("div").queue(function () {
$(this).addClass("newcolor");
$(this).dequeue();
});
$("div").animate({left:'-=200'},500);
$("div").queue(function () {
$(this).removeClass("newcolor");
$(this).dequeue();
});
$("div").slideUp();
});
Headsen 2010-06-29
  • 打赏
  • 举报
回复
JS,顺序编译 顺序执行

所谓的同步异步 仅仅是资源在访问时是不是已经准备好了。
一般情况写的JS不会出现资源抢占问题,一般在编程时对于生成资源 和处理大量资源的脚本端使用setTimeout() 以避免临近的脚本抢占他的资源。

特别是当前没遇见更改HTML文档结构,后面语句紧接着访问的情况。
xxccccxxxewe 2010-06-29
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 headsen 的回复:]

xmlhttp.open("GET","http://localhost/books.xml", false);

看第三个参数,默认是为true的,即异步方式,就是不等服务器返回就执行下面的代码。
改为false就同步了。等待返回,下面的才执行。不返回一直等待。
同步效率很低。
[/Quote]

可以了,就是这样。谢谢啊?

再问下。如果是普通的JS函数,怎么做同步呢?
Headsen 2010-06-29
  • 打赏
  • 举报
回复
xmlhttp.open("GET","http://localhost/books.xml", false);

看第三个参数,默认是为true的,即异步方式,就是不等服务器返回就执行下面的代码。
改为false就同步了。等待返回,下面的才执行。不返回一直等待。
同步效率很低。
xxccccxxxewe 2010-06-29
  • 打赏
  • 举报
回复
还是不太懂。

window.setTimeout()

里面不是一个函数名和时间间隔吗?

就我现在上面的情况,应该怎么样才能做到?
dojotoolkit 2010-06-29
  • 打赏
  • 举报
回复
Js规范中没有定义sleep行为,也就是说js语言没法暂停。只能通过回调函数实现。

function sleep(time, callback){
window.setTimeout(time, callback);
}
xxccccxxxewe 2010-06-29
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 jsjhj2008 的回复:]

ajax来异步来调用不就可以了啊
[/Quote]

AJAX我只是初学。怎么样子异步调用啊?
jsjhj2008 2010-06-29
  • 打赏
  • 举报
回复
ajax来异步来调用不就可以了啊
xxccccxxxewe 2010-06-29
  • 打赏
  • 举报
回复
帮忙看看好结贴。
xxccccxxxewe 2010-06-28
  • 打赏
  • 举报
回复
页面上一个按钮,点击会弹出一个确定框(我用window .confirm ()来做)


var boolpoint=false;//返回的结果

var SetBool=true;

function GetMore(参数1,参数2,参数3) {
if (window.confirm("提示")) {
//这里执行一段AJAX函数,根据结果返回true或者false;
//在AJAX执行完毕后SetBool=false;

}
while(SetBool){}

return boolpoint;
}
return false;
}


像上面这样。
页面上一个Button 的 OnClientClick="return GetMore()"

xxccccxxxewe 2010-06-28
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 hb308102796 的回复:]

楼主用的是ocx控件吗?本来有个方法是可以检测到的
if(obj.state == 4) {
//要执行的函数
.....
}
但上次我试这个方法好像不行,于是我就这样:
s = setInterval(function(){
//要执行的函数
......
},2000);
这个比你用死循环好的多吧?而且不会出现你所说的IE提示脚本运行缓慢的……
[/Quote]


不是的。不能用setInterval和SetTimeOut的。

情况是这样:
优秀APP开发 2010-06-28
  • 打赏
  • 举报
回复
楼主用的是ocx控件吗?本来有个方法是可以检测到的
if(obj.state == 4) {
//要执行的函数
.....
}
但上次我试这个方法好像不行,于是我就这样:
s = setInterval(function(){
//要执行的函数
......
},2000);
这个比你用死循环好的多吧?而且不会出现你所说的IE提示脚本运行缓慢的错误!

当然,记住要try{}catch(e){}一下啊,不然如果加载未成功的情况下调用控件内的方法,浏览器报错
hoojo 2010-06-28
  • 打赏
  • 举报
回复

可以用setTimeout延时操作,也可以在后台用线程延时。

yliu0 2010-06-28
  • 打赏
  • 举报
回复
我这是对7楼的回答。和你的问题不是一样的。
我对楼主的回答在5楼。
回答分叉了,请多包涵。
xxccccxxxewe 2010-06-28
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yliu0 的回复:]

大致是这个样子:
JScript code

function f(arg1, arg2, callback) {
//do stuff
callback && callback();
}
[/Quote]

似乎还是不行,不是执行的先后顺序问题,

假如让A函数返回ture或false,

而结果是true还是false是根据A函数里面的一个AJAX方法得出来的。

而A函数返回结果之前,AJAX还没有执行完。

yliu0 2010-06-28
  • 打赏
  • 举报
回复
大致是这个样子:

function f(arg1, arg2, callback) {
//do stuff
callback && callback();
}
passself 2010-06-28
  • 打赏
  • 举报
回复
没有,不过可以用settimeout来达到类似的效果
xxccccxxxewe 2010-06-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 yliu0 的回复:]

》同时有a,b,c三个JS函数,无法严格控制它们执行的顺序

可以用回调函数嵌套来控制执行的顺序。
[/Quote]

具体如何实现,能不能写三个简单的函数测试看看。
yliu0 2010-06-28
  • 打赏
  • 举报
回复
》同时有a,b,c三个JS函数,无法严格控制它们执行的顺序

可以用回调函数嵌套来控制执行的顺序。

youufis 2010-06-28
  • 打赏
  • 举报
回复
以前问个这样的问题,JS是异步执行,比如同时有a,b,c三个JS函数,无法严格控制它们执行的顺序!!换个其他思路或变通想法吧。
加载更多回复(6)

87,901

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧