您好我咨询过:https://stackoverflow.com/a/9652434/3109607但仍然遇到回调问题。我还检查过JS是性感的,callbackhell-dotcom,CW Beuchler的博客,Github上的Maxogen回购以及其他关于这个主题的回复。
先生。 Beuchler非常友好地回答我的问题,但没有他指出我无法确定哪个函数“thingToRun”在下面链接的要点中。我想在这里包含代码,但我遇到了麻烦所以我不得不使用这个要点。
在大多数函数中,这被写成“回调”,所以他写的是为了说明它不一定是,但我仍然无法识别哪个函数被传递到getData。当我消除Beuchler先生的评论并试图自己找到它时,我遇到了麻烦。对我来说,它看起来像logData(我只是基于每个函数接收的参数)但这是一个常规函数。或许我误解了功能。
我需要信息来编写一个获取用户纬度/经度的简单应用,检查google的API以根据纬度/经度获取用户的城市名称,然后检查Dark Sky API以获取您当地的天气基于纬度/经度。所以在此之后我必须弄清楚如何让多个回调一起玩。
链接到Beuchler先生的要点(有帮助,但我仍然没有得到)对我的回应:https://gist.github.com/theednaffattack/25d24d620cc35b160c17a95756fd1927
答案 0 :(得分:0)
如果我正确理解了这个问题,您打算将function
的名称作为回调传递。如果您的function
看起来像这样:
function myFunc(/*some parameters*/) {
//Do something
}
然后您可以在大多数网络浏览器中使用myFunc.name
获取其名称。要使这个防弹,你需要function
这样:
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
}
现在
console.log(getFunctionName(myFunc));
将产生
myFunc的
console.log(getFunctionName());
将产生
假
console.log(function() {});
将产生空字符串,因为function
没有名称。
如果我们定义类似这样的东西
function something() {
this.somethingElse = function() {};
}
然后
console.log(getFunctionName((new something()).somethingElse));
将产生空字符串。显然,我们希望它能够产生somethingElse
,但我们需要对此进行额外的调整。建议:
function nameFunction(func, name) {
func.funcionName = name;
return func;
}
然后
function something() {
this.somethingElse = nameFunction(function() {}, "somethingElse");
}
然后将我们一直使用的function
更改为
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
}
现在您已准备好从getFunctionName
拨打getData
,如下所示:
function getData(dataURI, thingToRun) {
var myData = getSomeData();
console.log(getFunctionName(thingToRun));
thingToRun(myData);
}