Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.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 在函数1完成后调用函数2_Javascript_Callback - Fatal编程技术网

Javascript 在函数1完成后调用函数2

Javascript 在函数1完成后调用函数2,javascript,callback,Javascript,Callback,我正在用JavaScript编写代码。 我有两个函数func1和func2。 func1没有返回值,func2有返回值。 function outFunc(){ func1(); val = func2(); return val; } func1内部有异步操作。 如何确保仅在func1完成后调用func2?代码始终按处理顺序执行 但是,如果func1在内部执行一个异步操作,那么它将调用代码之外的一些不会立即返回的内容func1本身将完成,但操作可能无法完成 在这种情况

我正在用JavaScript编写代码。
我有两个函数func1和func2。
func1没有返回值,func2有返回值。

function outFunc(){
    func1();
    val = func2();
    return val;
}
func1内部有异步操作。

如何确保仅在func1完成后调用func2?

代码始终按处理顺序执行

但是,如果
func1
在内部执行一个异步操作,那么它将调用代码之外的一些不会立即返回的内容
func1
本身将完成,但操作可能无法完成

在这种情况下,
func1
应该将回调作为函数参数公开。从结构上来看,
func1
内部与此类似:

function func1(callback) {

    // do some stuff

    callback();

}
现在,在
do some stuff
中,会有异步操作具有相同的警告,因此
func1
将负责根据需要将
回调
适当地传递到这些操作中。这种结构实际上取决于这些操作是什么

但关键是,任何执行异步操作的函数都应该公开一个回调,以便在该操作完成后调用。然后,您可以将其用作:

func1(func2);

但是请注意,您在这里遇到了另一个问题。因为
func1
是异步的,所以
outpunc
也是异步的。这意味着这是行不通的:

return val;
outpunc
将在异步操作完成之前完成。因此,不会返回任何有价值的内容。关于这个问题有一些非常好的深入解释。但本质上,您需要重新思考如何构建代码。问题中提供的人为的例子并不能真正提供这方面的建议


您需要提供回调,而不是返回值。通常使用返回值执行某些操作的代码将被放在回调中,并在稍后值可用时执行该操作。

您将无法从
func2
返回值。如果要使用由
func2
外部返回的值,则您的
outpunc
也将有一个回调处理程序

function outFunc(finalCallback){
    func1(func2,finalCallback);
}

function func1(callback, finalCallback)
{
 //once the asynch operation has finished
 callback(finalCallback);
}

function func2(finalCallback)
{
   //compute return-value
   finalCallback(return-value);
}

func1是否有任何异步操作?如果没有对
func1
的异步调用,则默认情况下它可以正常工作是的,func1内部有异步操作。然后需要将func2作为回调处理程序传递给func1@gurvinder372我该怎么办?你能给我举个例子吗?