2016-08-02 7 views
-3

У меня есть (асинхронная) функция, которая получает идентификатор зарегистрированного пользователя в Chrome. Я пытаюсь вернуть значение идентификатора с обратным вызовом, но он продолжает возвращать «undefined».Обратный звонок не работает - Javascript

Перед кто-то пытается пометить этот дубликат, я использовал код здесь (и пробовал другие места тоже): 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 

Что именно я делаю неправильно/что такое правильный код?

+0

Вы уверены, что используете 'callback' или' Callback'? Ошибка говорит, что вы используете «Обратный звонок». Но ваш код имеет обратный вызов как строчный. – zero298

+0

по ошибке, «Обратный звонок» - это не функция, здесь C является капиталом в обратном вызове –

+0

Было сделано изменение - это была опечатка – JamesJameson2456

ответ

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 Я только что создал функцию inline:

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() { ... }); 
+0

Итак, как должен выглядеть мой код? – JamesJameson2456

+0

В принципе, вы должны установить любые переменные и обработать всю логику, связанную с идентификатором 'Gaia'' в обратном вызове. – Seth

+0

@ JamesJameson2456 см. Редактировать –

Смежные вопросы