Я получил эту рекурсивную функцию. Я вижу, что это циклично, когда возврат данных является нулевым, но он не возвращает обещание, когда данные не являются нулевыми после выполнения рекурсивной задачи. Похоже, что, закончив делать рекурсивную задачу, обещание где-то потеряется. Кто-нибудь укажет, что я сделал здесь неправильно?Рекурсивная функция Javascript с отсрочкой не возвращается
var callrq1 = function(globalsystemid, globalgraphid, start, end, lastcheck) {
var datetimeformat = "YYYY-MM-DD HH:mm:ss";
var d1 = new $.Deferred();
var request1 = "../system/" + globalsystemid + "/highcharts.xml?type=" + globalgraphid + "&start=" + start + "&end=" + end;
var requeststring1 = makejson(request1); //this makejson function is an ajax get and return promise
requeststring1.done(function(data) {
if (data != null) {
d1.resolve(data);
} else {
var theend = moment(lastcheck).format(datetimeformat);
var newstart = moment(end).format(datetimeformat);
var newend = moment(end).add(1, 'weeks').format(datetimeformat);
if (newend <= theend) {
//recursive callrq1
callrq1(globalsystemid, globalgraphid, newstart, newend, theend);
} else {
d1.resolve(null);
}
}
});
return d1.promise();
}
callrq1(globalsystemid, globalgraphid, starttimeobj.start, starttimeobj.end, endtimeobj.start).then(function(data) {
console.log(data);
});
Я также пробовал этот путь. Возвратите обещание результата от работ makejson. Да, я буду укусить это, поскольку один меньше отложенных/обещаний, хотя код выглядит довольно продвинутым, чтобы понять, как вы думаете, преимущество от этого сравнивается с вышеизложенным? Большое спасибо за ввод. –
Это более краткий, более функциональный, быстрый, менее ошибочный, более понятный (более естественный поток) ... Пожалуйста, проверьте ссылку в моем ответе. – Bergi
Спасибо, Берги, да, просто переваривая вашу ссылку, еще одна вещь, чтобы узнать :). Я из C фона и поэтому используется для неявного кодирования. Огромное спасибо! –