js 等待前一个函数执行结束

mzy939216 2011-07-26 04:25:23
现在的JS代码:

function start_flow()
{
start_project();
start_config();
...
}

function start_project()
{
...
}

function start_config()
{
...
}


现在的问题是start_project()还没有执行完成就开始执行start_config()了,这样会出错,
想达到的效果是start_project()执行完成再start_config(),即JS的同步执行,请问要如何做?
...全文
11104 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
xww1024 2012-08-20
  • 打赏
  • 举报
回复
反弹过后认为结婚那又能提供环境模拟和南京
北京张镇 2012-02-06
  • 打赏
  • 举报
回复
这正是我急需的。我看看好使不……
insert_viann 2011-11-29
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 mubeibei 的回复:]

HTML code

我确实有点不理解为什么,你的方法会不等待之前的执行完。。。
你看我写的这个例子,a方法输出10000条,b只有一条,要是不等待的话,b输出的那个语句就不应该在最后。
可是现在b的那个输出语句就是在最好。。。。
[/Quote]
当有其中一个方法有异步请求到后台的时候,就会有下一个方法抢先执行的问题了
mzy939216 2011-07-26
  • 打赏
  • 举报
回复
谢谢各位,7楼,8楼的方法都好使,已经试验成功了!散分了!
hch126163 2011-07-26
  • 打赏
  • 举报
回复
function start_flow() { start_project(); ... }

function start_project() {

int_value = setInterval("embed('ANSYS CFD Viewer')",1000);

function embed(title_name) { var stat;
stat = smartembededwidget.embed_app('QWidget', title_name, 0,-27, 0, 0);
if(stat){ clearInterval(int_value); start_config(); }
}
}

function start_config() { ... }
MadEric 2011-07-26
  • 打赏
  • 举报
回复
function start_project()
{
int_value = setInterval("embed('ANSYS CFD Viewer')",1000);

function embed(title_name)
{
var stat;
stat = smartembededwidget.embed_app('QWidget', title_name, 0,-27, 0, 0);
if(stat) {
clearInterval(int_value);
start_config();//*********函数可以写在这么?
}
}
}
MuBeiBei 2011-07-26
  • 打赏
  • 举报
回复

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>
<p id="a"></p>
<script>
function a(){
for(var i = 0; i < 10000; i++){
document.writeln('a' + i);
}
};

function b(){
document.writeln('我是b方法里的一条输出语句');
}

function c(){
a();
b();
};

c();

</script>

</body>
</html>



我确实有点不理解为什么,你的方法会不等待之前的执行完。。。
你看我写的这个例子,a方法输出10000条,b只有一条,要是不等待的话,b输出的那个语句就不应该在最后。
可是现在b的那个输出语句就是在最好。。。。
豆虫 2011-07-26
  • 打赏
  • 举报
回复
function start_flow()
{
start_project();
//start_config();注掉
}

function start_project()
{
int_value = setInterval("embed('ANSYS CFD Viewer')",1000);

function embed(title_name)
{
var stat;
stat = smartembededwidget.embed_app('QWidget', title_name, 0,-27, 0, 0);
if(stat){
clearInterval(int_value);
start_config(); //加这不就行了么 搞那么复杂干嘛
}

}
}

function start_config()
{
...
}
mzy939216 2011-07-26
  • 打赏
  • 举报
回复
等一下试试看你们的代码!
  • 打赏
  • 举报
回复
现在的问题是start_project()还没有执行完成就开始执行start_config()了,这样会出错,

怎么可能呢?

javascript是单线程执行,据我所知,应该不会出现这样的情况 。

楼主能举一个例子吗?
kyzy_yy_pm 2011-07-26
  • 打赏
  • 举报
回复
function start_flow()
{
start_project();
}

function start_project()
{
int_value = setInterval("embed('ANSYS CFD Viewer')",1000);

function embed(title_name)
{
var stat;
stat = smartembededwidget.embed_app('QWidget', title_name, 0,-27, 0, 0);
if(stat) {
clearInterval(int_value);
start_config();
}
}
}

function start_config()
{
...
}
MuBeiBei 2011-07-26
  • 打赏
  • 举报
回复
	function start_flow()
{
var count = 0,is_true = false;
setInterval(function(){
if(!count){
is_true = start_project();
count++;
}
if(is_true){
start_config();
is_true = false;
}
},1000);
...
}


不知道行不行。。。
燥动的心 2011-07-26
  • 打赏
  • 举报
回复
设置个标记是否完成,设置定时函数去执行start_config,执行后,清除定时器
weike021996 2011-07-26
  • 打赏
  • 举报
回复
我觉得给个时间差可以。很短的时间觉不出来。
MuBeiBei 2011-07-26
  • 打赏
  • 举报
回复
可以让这个方法start_project()返回一个值吗?
比如return true;
var is_true = start_project();
if(is_true){
start_config();
}

这样呢?
mzy939216 2011-07-26
  • 打赏
  • 举报
回复
start_project函数中的代码如下,因为有延时函数,所以照2楼的办法,还是会先执行start_config()的。

function start_flow()
{
start_project();
start_config();
...
}

function start_project()
{
int_value = setInterval("embed('ANSYS CFD Viewer')",1000);

function embed(title_name)
{
var stat;
stat = smartembededwidget.embed_app('QWidget', title_name, 0,-27, 0, 0);
if(stat) clearInterval(int_value);
}
}

function start_config()
{
...
}
MuBeiBei 2011-07-26
  • 打赏
  • 举报
回复
还有一种方法用setTimeout
<script>
function start_flow()
{
start_project();
setTimeout("start_config()",4000);
...
}

function start_project()
{
...
}

function start_config()
{
...
}

</script>


给时间差
MuBeiBei 2011-07-26
  • 打赏
  • 举报
回复
function start_flow()
{
start_project();

...
}

function start_project()
{
...
start_config();//把这个方法执行写在这个函数的最下面
}

function start_config()
{
...
}

87,997

社区成员

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

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