gpt4 book ai didi

javascript - 使用简单示例了解 Javascript 回调

转载 作者:行者123 更新时间:2023-11-29 10:14:58 27 4
gpt4 key购买 nike

我正在玩 Facebook SDK。我的目标是在玩这个例子时学习更多的 Javascript。我的学习方式是通过给自己布置任务,当我完成任务时,我就学会了:)

包含 Facebook SDK 的代码已启动并正在运行,此处未包含。我的问题不是针对 Facebook API,它只是一个例子。我正在尝试通过回调的这个常见问题来扩展我的 Javascript 知识

有一项任务我没有完成,我认为它与回调有关...任务:单击带有此代码的按钮:

<button id="askme" onclick='askFaceBook();'>Direct</button>

该代码将运行以下函数:

  function askFaceBook() {
var result = myApi.getLoggedName("Samsung");
};

这将依次运行 myApi 对象:

var myApi = {
getLoggedName: function (statement) {
return FB.api('/me', function(response) {

console.log(response);
return response + "" + statement;
});
}
}

问题:变量结果始终未定义。它在返回 myAPI.getLoggedName 之前执行。 myAPI 正在按预期工作如何使可变结果等待结果。我知道我可以使用 promises/deffered,但我想了解并学习如何使用回调来实现 Javascript 风格。

我希望有人能帮助我:)

最佳答案

首先,myApi.getLoggedName 中的 return 语句有什么问题

FB.api 函数采用两个参数,其中第二个参数是您的回调引用,并且在回调中没有使用 return 语句,因为没有人期望回调返回值。因此,当您调用 FB.api 时,它只是注册该回调(在响应中执行)并且不返回任何内容,因此您的函数 myApi.getLoggedName 返回未定义。

现在如何解决这个问题

在这种情况下,我们可以使用 Promises,例如

var myApi = {
getLoggedName: function (statement) {
var promise = new Promise(function(resolve, reject) {
FB.api('/me', function(response) {
console.log(response);
resolve(response + "" + statement);
});
}).then(function(result) {
return result;
});
}
}

现在,在这种情况下,当调用 resolve 时将执行 then 锁,并将结果作为参数传递给 then 回调。在这种情况下,结果不会是未定义的。

关于javascript - 使用简单示例了解 Javascript 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24204696/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com