Javascript 我如何编写一个JS函数来完成某件事情,然后在该过程完成后返回?
我正在向现有函数添加一些功能。我需要在当前例程的中间插入一个额外的步骤。我知道如何转到第二个函数,但我不知道在第二个例程完成后如何返回到主函数Javascript 我如何编写一个JS函数来完成某件事情,然后在该过程完成后返回?,javascript,function,Javascript,Function,我正在向现有函数添加一些功能。我需要在当前例程的中间插入一个额外的步骤。我知道如何转到第二个函数,但我不知道在第二个例程完成后如何返回到主函数 function step1(){ perform ajax call to see if student is assigned to a project step1_subfunction() // wait here until step1_subfunction is done do some more stuf
function step1(){
perform ajax call to see if student is assigned to a project
step1_subfunction()
// wait here until step1_subfunction is done
do some more stuff with response from user
}
function step1_subfunction(){
prompt user via jQuery dialog, 'Add or move employee to the project?'
// return to step1 with answer returned from user and resume
}
我会用谷歌搜索这个,但我不知道这个“过程”是否有名字。回到我的COBOL时代,我们称之为gosub
更新:
步骤1执行一个ajax调用,查看员工是否已被分配到项目中。如果response.status='Assigned',将通过jQuery对话框询问用户,“是否要将员工复制或移动到此项目?”。jQuery对话框将是step1_子例程。答案将传回step1函数。第1步的剩余部分只是在“复制”或“移动”的隐藏文本字段中放置一个值 你写的东西应该可以用——javascript是单线程的,所以你试过了吗 Javascript没有专门的子例程,只需创建一个返回并忽略结果的函数,就像您所做的那样。当第二个例程完成时,范围和执行将在第一个函数中继续。什么也不做 您试图实现的只是一个“函数调用”
因此,一旦执行,它将自动返回到调用方的“堆栈帧”。您所拥有的将执行您所描述的,但如果没有在函数step1\u subfunction()中返回,则可能无法将来自用户的数据用于函数step1()。下面我修改了您的示例代码,以演示值的传递
function step1(){
//do some stuff
var returnValFromFunction = step1_subfunction();
// wait here until step1_subfunction is done
// Now use returnValFromFunction, it contains the information from the user
do some more stuff with response from user
}
function step1_subfunction(){
prompt user for some information
// return to step1 with information returned from user and resume
return userResponse;
}
您可以使ajax对象同步,也就是说,在得到响应之前,任何代码都不会继续。它是open的第三个参数(true是异步的,false是同步的) 在某些情况下,同步调用是可以的,但如果可能,应始终避免同步调用 另一种选择是绑定onReadyStateChange事件,这可能需要在代码中进行一些逻辑更改,但从长远来看效果更好。每当xmlHttpRequest对象的状态发生变化时,就会触发该命令-您可以检查状态是否为200,readystate是否为4,以确保请求成功完成
更好的参考资料。祝你好运。只要
step1\u子函数
不执行任何异步代码,它就是这样运行的works@scibuff就像一个偶然的ajax调用?@dlackey:是的。它step1\u子函数包含一个AJAX调用,这不起作用。由于异步AJAX调用,我已经更新了详细信息。我写出了框架,它/看起来/是单线程的,但在我开始调整现有过程之前,我想确认我的逻辑是正确的。我阅读了“return”的用法这正是我需要的。谢谢,挥手
xmlhttpobject.open('POST', 'url', false);