重复JavaScript函数并返回初始回调?

时间:2018-05-24 17:30:42

标签: javascript function callback

是否有可能在再次调用自身后再次调用再调用 的函数,最终运行最初的回调函数?

我将在代码中解释我的意思......

//on page load
getProviderNextAppointment(null, function(nextAppointment) {

    otherFunction(); //<----- how can I always end up back here, no matter what?

});


//getProviderNextAppointment function
function getProviderNextAppointment(startDate, callback) {

    getNextAppointment('provider', startDate, function(data) {

        //if provider has schedule
        if(!$.isEmptyObject(data.AllProviders)) {

            //set provider params
            //nextAppointment = data.x

            //callback
            if(typeof callback === 'function') {
                return callback(nextAppointment); //callback from call on page load
            }

        } else {

            if(data.ErrorCode !== 'StartDateTooFarInFuture') {

                /*---------->
                 * this is where we this function calls itself again;
                 * but when it hits the callback above (provider
                 * has schedule), or when it hits the callback
                 * below (last group of appointments), it
                 * should run the initial callback to
                 * execute otherFunction()
                 <----------*/
                getProvidersNextAppointment(data.LatestDate);

            } else { //hit last group of appointments

                if(typeof callback === 'function') {
                    return callback(null); //callback from call on page load
                }

            }

        }

    });

}

我没有包含getNextAppointment()功能,因为它与问题无关。只知道它正在调用返回约会信息的API,以及我们用作下一个API调用的LatestDate的{​​{1}}属性。我们也在寻找startDate属性的响应,表示它是结果的结束,因此我们不会永远循环。

1 个答案:

答案 0 :(得分:0)

如果你需要保留对初始回调函数的引用,那么你可以通过递归调用将它传递给它。

从此处更改递归调用:

getProvidersNextAppointment(data.LatestDate);

为:

getProvidersNextAppointment(data.LatestDate, callback);

现在,嵌套函数上下文将引用原始回调函数,理论上这可以在递归树中进一步向下级联,直到最终执行回调函数。