JavaScript中的函数序列

时间:2015-12-05 20:26:36

标签: javascript jquery function delayed-execution deferred-execution

我对JavaScript中的函数序列有困难,到目前为止,我自己都无法解决这个问题。

在获得Bing API提供的大量结果后,结果的标题和说明将作为进一步处理的数据。作为一种选择,我使用Yahoo Query Language来获取结果'URL后面的文本内容,以增加这些数据。

问题:这个步骤过于冗长,在YQL函数完成之前就开始了进一步的处理。

我目前正试图以承诺和解决方案来解决这个问题。像https://stackoverflow.com/a/21524239那样推迟。这是正确的方法吗?我做错了什么?

第一个功能

/* display results with topic labels */
function displayResults(results) {
    /* ### call topicise and ensure that it is finished ### */
    var promise = topicise(results);
    promise.then(function() { 
        // further processing
    });
}

第二功能

function topicise(results) {

    /* ### call generateTopics and ensure that it is finished ### */
    var deferred = $.Deferred();

    var promise = generateTopics(results);
    promise.then(function() { 
        // some code

        deferred.resolve();

        // even more code

        return deferred.promise();
    }); 
}

第三功能

/* parse results for topic generation */
function generateTopics(results) {
    // TODO: ensure get(External)Content is done before processing any further!
    // https://stackoverflow.com/a/21524239 
    var deferred = $.Deferred();
    var i = 0;

    if ($("#cbDeepScan").is(':checked')) {
        var nextStep = function() {
            if (i < results.length) {
                getExternalContent(i, results[i]);
                i++;
                setTimeout(nextStep, 500); 
            } else {
                deferred.resolve();
            }
        }
        nextStep();
        return deferred.promise();
    }
    // Default: Analyze description provided by meta tags
    else {
        var nextStep = function() {
            if (i < results.length) {
                getContent(i, results[i]);
                i++;
                setTimeout(nextStep, 500); 
            } else {
                deferred.resolve();
            }
        }
        nextStep();
        return deferred.promise();      
    }
}

祝你好运, 扬

0 个答案:

没有答案