调用函数将值作为变量返回 - Soundcloud API

时间:2015-05-06 23:37:03

标签: javascript function soundcloud

我尝试在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"中那样调用一个值。以上功能。

如果有帮助,可以添加更多代码。

1 个答案:

答案 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之类的内容,但尚不适用于大多数移动浏览器(希望很快)