回调不起作用 - Javascript

时间:2016-08-02 13:41:49

标签: javascript asynchronous callback

我有一个(异步)函数,可以获取Chrome中已登录用户的ID。我试图通过回调返回ID的值,但它一直返回'undefined'。

在有人试图将此标记为副本之前,我使用了此处的代码(并尝试了其他地方):How to return value from an asynchronous callback function?但它不起作用:

function getGaia(callback) {
    chrome.identity.getProfileUserInfo(function(userInfo){
      var userId = userInfo.id;
      callback(userInfo.id);
    });
}

getGaia(function(id){
    return id;
});

var gaiaId = getGaia();

我收到以下错误:

'callback' is a not a function

我究竟做错了什么/正确的代码是什么?

1 个答案:

答案 0 :(得分:2)

那是因为你没有提供回调。



function doSomethingLater(callback) {
  setTimeout(callback, 1000);
}

console.log('This is before the callback');
doSomethingLater(function() {
  console.log('This is the callback')
});




因此,当您调用var gaiaId = getGaia();时,您没有传递回调函数

[编辑]这是您的代码需要的样子:

function getGaia(callback) {
    chrome.identity.getProfileUserInfo(function(userInfo){
      var userId = userInfo.id;

      // This will call the function that you pass in below 
      //and pass in userInfo.if as a parameter
      callback(userInfo.id); 
    });
}

var gaiaId = getGaia(function (id) {
    // id === userInfo.id from above
    // Do something with the id that you pass in
});

您可以将JavaScript中的变量等函数视为

所以你可以为这样的变量赋一个函数:

var foo = function () { ... }

这意味着您可以将其传递给普通变量等函数。将函数作为参数传递时,将函数分配给在参数中指定的名称:

var foo = function () { ... }

function hasCallback(callback) {
    // The following two line do exactly the same thing:
    callback(); // Using the function that you passed in
    foo(); // Using the function directly
}

hasCallback(foo);

我上面所做的全部是,而不是创建变量foo我刚刚创建了内联函数:

var foo = function () { ... }

function hasCallback(callback) {
    // The following two line do exactly the same thing:
    callback(); // Using the function that you passed in
    foo(); // Using the function directly
}

hasCallback(foo);

// Becomes: 

function hasCallback(callback) {
    callback(); // Using the function that you passed in
}

hasCallback(function () { ... });