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

标签 javascript callback

我正在玩 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/

相关文章:

javascript - 使用 PHP 和 AngularJS 加载更多评论

javascript - 如何使用 Koa 渲染模板

JavaScript/React 风格指南缩进

python - Cython:如何将 C 函数分配给 Python/Cython 变量?

java - 从新线程回调到启动线程的类

javascript - Shopify Buy Button 最小数量

javascript - 如何使 cardHeader 组件中的头像元素居中?

javascript - 为什么在浏览器上调用 API 没有返回回调

java - 从服务器在客户端执行的 spring 双向 rmi 回调

JavaScript:有没有更好的方法来做一个带有回调函数的for循环?