我对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();
}
}
祝你好运, 扬