Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我如何编写一个JS函数来完成某件事情,然后在该过程完成后返回?_Javascript_Function - Fatal编程技术网

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);