在我的情况下如何在函数内调用函数本身

时间:2016-10-06 19:41:45

标签: javascript angularjs

我试图在函数中调用函数本身。

如果第一个请求具有id,它基本上会调用函数本身来发出另一个请求。

我有类似

的东西
function test(variable) {
    var q = $q.defer();
    $http({
           method: 'get',
           url: 'myurl.com'
        }).then(function(returnData) {
            if(returnData.getNewInfo) {
                test(returnData.id).then(function(secondData){
                   q.resolve(secondData);
                })
            } else {
                   q.resolve(returnData)
            }    
        });            
    }
    return q.promise;
}

我到了 test(...).then在此行的控制台中不是函数错误

 test(returnData.id).then(function(secondData){

我试图在promise中调用函数本身。不知道如何解决我的问题。任何人都可以帮我吗?非常感谢!

3 个答案:

答案 0 :(得分:1)

修复你的代码缩进,你将得到以下内容 - 请参阅我关于迷路支撑的评论。所以函数返回undefined而不是q.promise

function test(variable) {
    var q = $q.defer();
    $http({
        method: 'get',
        url: 'myurl.com'
    }).then(function(returnData) {
        if (returnData.getNewInfo) {
            test(returnData.id).then(function(secondData) {
                q.resolve(secondData);
            })
        } else {
            q.resolve(returnData)
        }
    });
}  // <------- end of function - should be removed?

return q.promise;
}

答案 1 :(得分:1)

您可以退回$http来电。 Promise是可链接的,$http会返回一个承诺。

function test(variable) {
    return $http({
        method: 'get',
        url: 'myurl.com'
    }).then(function (returnData) {
        if (returnData.getNewInfo) {
            return test(returnData.id);
        } else {
            return returnData;
        }
    });
}

答案 2 :(得分:0)

试试这个:

function test(variable, callback) {
  /*snip*/
  callback();
  /*snip*/
}
test("foo",test);