Callback 如何识别回调函数

Callback 如何识别回调函数,callback,Callback,您好,我已经咨询过了:但是回拨仍然有问题。我还检查了JS是性感的,callbackhell.com,CW Beuchler的博客,Github上的Maxogen repo,以及其他关于这个主题的文章 Beuchler先生很友好地回答了我的问题,但如果没有他指出,我无法确定下面链接的要点中的“thingToRun”是哪个功能。我想在这里包括代码,但我遇到了麻烦,所以我不得不使用要点 在大多数函数中,这是作为“回调”编写的,所以他写这篇文章是为了说明它不必是回调,但我仍然无法确定哪个函数被传递到ge

您好,我已经咨询过了:但是回拨仍然有问题。我还检查了JS是性感的,callbackhell.com,CW Beuchler的博客,Github上的Maxogen repo,以及其他关于这个主题的文章

Beuchler先生很友好地回答了我的问题,但如果没有他指出,我无法确定下面链接的要点中的“thingToRun”是哪个功能。我想在这里包括代码,但我遇到了麻烦,所以我不得不使用要点

在大多数函数中,这是作为“回调”编写的,所以他写这篇文章是为了说明它不必是回调,但我仍然无法确定哪个函数被传递到getData中。当我删除贝什勒先生的评论,并试图自己找到它时,我遇到了麻烦。对我来说,它看起来像logData(我只是基于每个函数接收的参数),但这是一个常规函数。或者我误解了函数

我需要这些信息来编写一个简单的应用程序,获取用户的纬度/经度,检查谷歌的API,根据纬度/经度获取用户的城市名称,然后检查黑暗天空API,根据纬度/经度获取当地天气。所以在这之后,我必须弄清楚如何让多个回调一起玩


链接到Beuchler先生(很有帮助,但我仍然不明白)对我的回答的要点:

如果我正确理解了这个问题,您打算获取作为回调传递的
函数的名称。如果您的
函数
如下所示:

function myFunc(/*some parameters*/) {
    //Do something
}
function getFunctionName(func) {
    if (typeof func === "function") { //Make sure the input is a function
        if (func.name) { //This is a named function
            return func.name;
        }
        var text = func + "";
        text = text.substring(0, text.indexOf("(")).trim();
        var spaceIndex = text.indexOf(" ");
        if (spaceIndex > 0) { //We need something like function myFunc
            return text.substring(text.indexOf(" ")).trim();
        }
        return ""; //Does not have a name
    }
    return false; //Not a function
}
function getData(dataURI, thingToRun) {
  var myData = getSomeData();
  console.log(getFunctionName(thingToRun));
  thingToRun(myData);
}
然后,您可以在大多数web浏览器中使用
myFunc.name
获取其名称。要使其防弹,您需要一个类似以下内容的
功能

function myFunc(/*some parameters*/) {
    //Do something
}
function getFunctionName(func) {
    if (typeof func === "function") { //Make sure the input is a function
        if (func.name) { //This is a named function
            return func.name;
        }
        var text = func + "";
        text = text.substring(0, text.indexOf("(")).trim();
        var spaceIndex = text.indexOf(" ");
        if (spaceIndex > 0) { //We need something like function myFunc
            return text.substring(text.indexOf(" ")).trim();
        }
        return ""; //Does not have a name
    }
    return false; //Not a function
}
function getData(dataURI, thingToRun) {
  var myData = getSomeData();
  console.log(getFunctionName(thingToRun));
  thingToRun(myData);
}
现在

将屈服

myFunc

将屈服

假的

将产生空字符串,因为
函数
没有名称

如果我们定义这样的东西

function something() {
    this.somethingElse = function() {};
}
然后

将生成空字符串。显然,我们希望它能产生
一些东西,但我们需要对此进行额外的调整。建议:

function nameFunction(func, name) {
    func.funcionName = name;
    return func;
}
然后

function something() {
    this.somethingElse = nameFunction(function() {}, "somethingElse");
}
然后更改我们一直用于

function getFunctionName(func) {
    if (typeof func === "function") { //Make sure the input is a function
        if (func.name) { //This is a named function
            return func.name;
        } else if (typeof func.functionName === "string") { //We called nameFunction on this
            return func.functionName;
        }
        var text = func + "";
        text = text.substring(0, text.indexOf("(")).trim();
        var spaceIndex = text.indexOf(" ");
        if (spaceIndex > 0) { //We need something like function myFunc
            return text.substring(text.indexOf(" ")).trim();
        }
        return ""; //Does not have a name
    }
    return false; //Not a function
}
现在您可以从
getData
调用
getFunctionName
,如下所示:

function myFunc(/*some parameters*/) {
    //Do something
}
function getFunctionName(func) {
    if (typeof func === "function") { //Make sure the input is a function
        if (func.name) { //This is a named function
            return func.name;
        }
        var text = func + "";
        text = text.substring(0, text.indexOf("(")).trim();
        var spaceIndex = text.indexOf(" ");
        if (spaceIndex > 0) { //We need something like function myFunc
            return text.substring(text.indexOf(" ")).trim();
        }
        return ""; //Does not have a name
    }
    return false; //Not a function
}
function getData(dataURI, thingToRun) {
  var myData = getSomeData();
  console.log(getFunctionName(thingToRun));
  thingToRun(myData);
}

非常非常好的问题!