JavaScript中严格的回调定义

时间:2019-02-07 11:47:32

标签: callback

当我尝试找到Callback的定义时,我可以找到很多信息,但是问题是它们不是统一的,而是完全不同的。

我经常遇到的定义之一是,回调只是一个作为参数传递给高阶函数的函数。例如

 function higherOrderFunction(callback, otherArguements){
      // do some stuffs
      callback();
 }

其次,最常见的是“回调”是在特定功能完成后执行的功能。

在这里,我很困惑。第一个定义与格式(或规则)有关,而第二个定义与目的有关。那么,这两者之间的联系是如此紧密。但是我还找不到连接,以及为什么这种连接是不可避免的。

另外,作为反例,对于第一个定义的第二个定义,我可以编写如下的函数。

例如

 function higherOrderFunction(callback, otherArguements){
     callback();
     // do some stuffs later! 
 }

然后,将回调作为参数传递,但是它将在其他内容之前执行,而不是在其他内容完成之前执行。

所以,我在这里很困惑。 “回调”的严格,确切的定义是什么?

1 个答案:

答案 0 :(得分:0)

如果您只想在callback()之前做某事,那么使用higherOrderFunction并没有太多好处。

大多数回调用于获取来自另一个异步调用/进程的结果,即

function callback(err, rows){
    if (err) {
        console.log(err);
        return null;
    } else { 
        return rows;
    }
}

function queryDB(callback, sql){
    // Do the database suff
    callback(err, rows);
}

通过使用回调,您可以避免等待/竞速的问题,即

var IneedResultsFromDatabase=queryDB("some SQL");
//But you need to wait [I don't know how many] seconds before I get a result.
print(IneedResultsFromDatabase);//gives you undefined

正确的方法是使用回调(javascript示例)

var data=queryDB(callback, sql);

因此,默认情况下,它会一直等到您获得结果或记录错误并返回null为止。