调用函数 return 值作为变量 - Soundcloud API
Calling a functions return value as a variable - Soundcloud API
我正在尝试在 Chrome 的控制台中进行调试,并创建了这个用于测试的小函数。
var hello = function(){
var text = "Hello World";
return text;
};
它如我所愿地工作,当我调用函数 hello() 时;它 return 是字符串 "Hello World".
现在我无法使用 Soundcloud API 解析端点使用此功能。
var idGetter = function(){
SC.get('/resolve', { url: userURL }, function(user) {
SC.get('/users/', function() {
return (user.id);
});
});
};
当我用 console.log 替换 return 时,我得到了我在控制台中寻找的值,所以我知道它正在获取数据,但是当我使用 return我无法像在上面的 "Hello World" 函数中那样调用值。
如果有帮助,可以添加更多代码。
这是典型的 Javascript 行为这里发生的是 return 在这里发生....
var idGetter = function(){
SC.get('/resolve', { url: userURL }, function(user) {
SC.get('/users/', function() {
return (user.id);
// not here
});
});
// Return happens here
};
这就是 return 可能未定义的原因。人们通常有两种处理方式,回调或承诺。
1.) 回调
var idGetter = function(callback){
SC.get('/resolve', { url: userURL }, function(user) {
SC.get('/users/', function() {
callback(user.id);
});
});
};
idGetter(function(id){
return id;
})
2.) 承诺
这可能是要采取的路线,如果您使用的是框架,它可能已经包含此内容,但是,如果不只是包含 this library。
var idGetter = function(){
var deferred = Q.defer();
SC.get('/resolve', { url: userURL }, function(user) {
SC.get('/users/', function() {
deferred.resolve(user.id);
});
});
return deferred.promise;
}
还有其他选项可以处理这种情况,但这是最常见的 2 个选项。
更新:
另一个答案适用于类似 this 但不适用于大多数移动浏览器(希望很快)
我正在尝试在 Chrome 的控制台中进行调试,并创建了这个用于测试的小函数。
var hello = function(){
var text = "Hello World";
return text;
};
它如我所愿地工作,当我调用函数 hello() 时;它 return 是字符串 "Hello World".
现在我无法使用 Soundcloud API 解析端点使用此功能。
var idGetter = function(){
SC.get('/resolve', { url: userURL }, function(user) {
SC.get('/users/', function() {
return (user.id);
});
});
};
当我用 console.log 替换 return 时,我得到了我在控制台中寻找的值,所以我知道它正在获取数据,但是当我使用 return我无法像在上面的 "Hello World" 函数中那样调用值。
如果有帮助,可以添加更多代码。
这是典型的 Javascript 行为这里发生的是 return 在这里发生....
var idGetter = function(){
SC.get('/resolve', { url: userURL }, function(user) {
SC.get('/users/', function() {
return (user.id);
// not here
});
});
// Return happens here
};
这就是 return 可能未定义的原因。人们通常有两种处理方式,回调或承诺。
1.) 回调
var idGetter = function(callback){
SC.get('/resolve', { url: userURL }, function(user) {
SC.get('/users/', function() {
callback(user.id);
});
});
};
idGetter(function(id){
return id;
})
2.) 承诺
这可能是要采取的路线,如果您使用的是框架,它可能已经包含此内容,但是,如果不只是包含 this library。
var idGetter = function(){
var deferred = Q.defer();
SC.get('/resolve', { url: userURL }, function(user) {
SC.get('/users/', function() {
deferred.resolve(user.id);
});
});
return deferred.promise;
}
还有其他选项可以处理这种情况,但这是最常见的 2 个选项。
更新:
另一个答案适用于类似 this 但不适用于大多数移动浏览器(希望很快)