在函数1已经完成之后调用函数2
Call a function2 after function1 has already finished
我使用JavaScript进行编码
我有两个函数func1,func2。
func1没有返回值,func2有返回值
function outFunc(){
func1();
val = func2();
return val;
}
func1内部有异步操作
如何确保只有在func1完成后才能调用func2
您将无法从func2
返回值。如果您想在外部使用func2
返回的值,那么outFunc
也将有一个回调处理程序。
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
应该将回调作为函数参数公开。func1
内部在结构上直观地类似于以下内容:
function func1(callback) {
// do some stuff
callback();
}
现在,在do some stuff
中,将存在具有相同警告的异步操作,因此func1
将负责根据需要将callback
适当地传递到这些操作中。这个结构实际上取决于这些操作是什么。
但关键是,任何执行异步操作的函数都应该公开一个回调,以便在该操作完成后调用。然后你会用它作为:
func1(func2);
但是请注意,您在这里遇到了另一个问题。因为func1
是异步的,所以outFunc
也是异步的。这意味着这不会奏效:
return val;
outFunc
将在异步操作完成之前完成。因此,不会返回任何有价值的东西。对于这个高度关联的问题,有一些非常好的深入解释。但从本质上讲,您需要重新思考如何构建代码。而问题中提供的这个人为的例子并不能真正提供这方面的建议。
您需要提供回调,而不是返回值。通常使用返回值执行某些操作的代码将被放入回调中,并在稍后值可用时执行该操作。
相关文章:
- 在刚刚调用的append函数之后,jquery.height()不会返回实际值
- 在包含tx.executeSql的每个函数之后显示警报
- 在每个函数之后运行一个函数
- 如何在调用去抖函数之后和执行之前取消该函数
- 阻止页面在jQuery函数之后重新加载或向上移动
- 如何在函数之后编辑它's已创建
- 在定义了构造函数之后,是否可以将实例属性添加到JavaScript原型中
- JS-强制函数在其他函数之后运行
- jquery .each 函数之后不执行任何代码
- 在函数之后找不到/未定义类名
- 如何在 Javascript 中使一组函数在另一组函数之后出现
- 在 JavaScript 函数之后保留原始数组
- 在 Ajax 函数之后 JavaScript 不起作用
- 在构造函数之后运行其他操作
- 聚合物在我的自定义函数之后注册所有元素
- 两个异步函数之后的回调
- 在完成函数之后再次调用 ajax 函数
- JQueryload()函数之后,JavaScript的其余部分停止工作
- 如何确保一个函数在另一个函数之后获得触发器
- 在其他函数之后从url中删除查询字符串