2011-03-13 114 views
4

我对JavaScript很陌生,需要在我的java脚本函数中使用回调函数。我不知道如何使用回调函数。下面是我的代码:如何在JavaScript函数中使用回调函数

function SelectedFeature() { 
// Here is my code call_Method1(); 
call_Method2(); 
} 

在上述功能的问题是,call_method2()开始call_Method1()执行之前结束它的执行。为了解决这个问题,有人告诉我使用回调函数。现在如何在我的SelectedFeature()函数中使用回调函数?请使用代码示例进行说明。

我在call_method1()中发出异步请求。我需要call_Method2()应在完成执行call_method1()后调用。但在我的情况下,在call_method1()完成其执行之前呼叫call_method2()。现在我该如何解决这个问题?

+1

我不认为call_Method2();开始beforre call_Method1()结束。我很确定(它一定是)call_Method1()会正确返回。正如你所说的,问题是异步调用IN method1。为了解决这个问题,需要查看call_Method1()的代码;要知道异步调用的外观以及如何使用回调。 – Chris 2011-03-13 12:23:45

回答

0

你用什么来做异步调用?你是自己编写代码还是使用类似JQuery的库?

你可以简单地把一个布尔说,“工作”,你设置为真,方法1开始,当它结束时回到假。那么你可以让method2在工作正常的时候等待。

+0

此方法是否阻止整个线程的执行? – a20 2015-10-02 09:42:20

7

你必须重构call_method1()接受和执行的回调后,执行完毕:

call_method1(call_method2); 

function call_method1(callback) { 
    // ... 
    // do asynchronous stuff, when the response is processed, call 
    if(typeof callback === 'function') { 
     callback(); 
    } 
    // ... 
} 

函数是一等公民,所以由他们的名字引用它们,你可以像任何其他值一样传递它们。

如果您发布call_method1的代码,我们可以提供更好的帮助。

+0

我会添加一个if语句来检查typeof回调=='函数'。只是为了安全。 – yoavmatchulsky 2011-03-13 12:29:33

+0

@yoavmatchulsky:好点...我只是懒惰;)...将添加它。 – 2011-03-13 12:32:55

+0

您可以使用==代替严格===,因为typeof将始终返回一个字符串。 :D – yoavmatchulsky 2011-03-13 13:20:36

0

这个问题已经由Felix在上面回答了。受到他的回答以及我在当前项目中遇到的问题的启发,我写了一个小题目,其中有一门课程,增加了一点额外的安全性。

综上所述,您可以像传递变量一样传递回调函数。然后接收器将作为一个函数触发它。

myCoolFunction: function(data) { 
    // Do some thing with response 
} 

$.get('/some/cool/url', myCoolFunction); 

在上面$.get电话回myCoolFunction与参数data一旦数据被取出

如果myCoolFunciton是一个变量,会发生什么。那么这取决于接收器如何处理输入。

只是要小心,我有一个CoffeeScript类(和它的JavaScript编译),将做一些安全检查。

它并没有做任何魔术,检查它是否是一个函数并返回,如果没有返回一个空函数,这样就可以减少JS错误的可能性。 https://gist.github.com/ziyan-junaideen/8717925