Я прочитал все вопросы по этой теме на SO, но я все еще застрял, потому что функция condition
в promiseWhile
не принимает параметр.
Мой пример использования следующий. Я пытаюсь запросить некоторую информацию на определенную дату (start_date
). Я не знаю, есть ли информация для start_date
в моей базе данных, поэтому я хочу проверить это. Если данных нет, я хочу сделать запрос накануне и продолжать делать это, пока не будет данных. (Я знаю, что promise while loop
не лучший способ сделать это, но я все же хочу узнать, как это сделать)
Вот мой код до сих пор
let start_date = DateTime.fromFormat(req.body.date, "yyyy-MM-dd");
let date_promise = (the_date) => {
let the_req = {
date: the_date
};
return db.query(the_req);
};
let promiseWhile = Promise.method(function (condition, action) {
if (!condition()) return;
return action().then(promiseWhile.bind(null, condition, action));
});
promiseWhile(
(body) => {return body.rows.length > 0},
() => {
start_date = start_date.minus(luxon.Duration.fromObject({days: 1}))
return date_promise(start_date);
},
).then((result) => {
// start_date ...
// do something with the date I've obtained
});
date_promise
вернуть обещание.
В моем состоянии promiseWhile
я пытаюсь проверить, что body.rows
содержит что-то, где body
является параметром функции .then
после разрешения результата date_promise
. (date_promise(some_date).then((body) => {...})
).
Я не уверен, что делать дальше. Любая помощь приветствуется.