我有一个(异步)函数,可以获取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
我究竟做错了什么/正确的代码是什么?
答案 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 () { ... });