我尝试在Chrome控制台中进行调试,并创建了这个小功能进行测试。
var hello = function(){
var text = "Hello World";
return text;
};
它按照我的意愿工作,当我调用函数hello()时;它返回字符串" Hello World"。
现在我没有使用Soundcloud API解析端点获得相同的功能。
var idGetter = function(){
SC.get('/resolve', { url: userURL }, function(user) {
SC.get('/users/', function() {
return (user.id);
});
});
};
当我用console.log替换返回时,我得到了我在控制台中寻找的值,所以我知道它将数据输出,但是当我使用return时我没有能像我在" Hello World"中那样调用一个值。以上功能。
如果有帮助,可以添加更多代码。
答案 0 :(得分:0)
这是典型的Javascript行为,这里发生的是返回发生在这里....
var idGetter = function(){
SC.get('/resolve', { url: userURL }, function(user) {
SC.get('/users/', function() {
return (user.id);
// not here
});
});
// Return happens here
};
这就是为什么返回可能是未定义的。人们通常会通过两种方式处理此问题,回调或承诺。
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;
}
还有其他选项可以处理这种情况,但这些是最常见的两种选择。
更新
另一个答案适用于this之类的内容,但尚不适用于大多数移动浏览器(希望很快)