使用承诺在下一个承诺中使用 return 值编写 while 循环
write a while loop using promises using return values within the next promise
我已经阅读了关于这个主题的所有问题,但我仍然卡住了,因为 promiseWhile
中的 condition
函数没有参数。
我的用例如下。我正在尝试查询某个日期 (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
return一个承诺。
在我的 promiseWhile
条件下,我试图测试 body.rows
包含一些东西 body
作为 .then
函数的参数在 [=17 的结果之后=] 解决。 (date_promise(some_date).then((body) => {...})
).
我不确定如何从那里继续。欢迎任何帮助。
Promise.method 是 async functions 的旧版本。考虑到这一点并进行一些语法更正,您的代码将如下所示:
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);
};
const myAction = date => () => date_promise(date);
let promiseWhile = async function (condition, action) {
const queryResults = await action();
if (!condition(queryResults)) {
start_date = start_date.minus(luxon.Duration.fromObject({days: 1}));
return promiseWhile(condition, myAction(start_date));
} else {
return queryResults;
}
};
promiseWhile(
body => body.rows.length > 0,
() => {
return myAction(start_date);
},
).then(result => { // The result you'll get here is queryResults.
// start_date ...
// do something with the date I've obtained
});
我已经阅读了关于这个主题的所有问题,但我仍然卡住了,因为 promiseWhile
中的 condition
函数没有参数。
我的用例如下。我正在尝试查询某个日期 (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
return一个承诺。
在我的 promiseWhile
条件下,我试图测试 body.rows
包含一些东西 body
作为 .then
函数的参数在 [=17 的结果之后=] 解决。 (date_promise(some_date).then((body) => {...})
).
我不确定如何从那里继续。欢迎任何帮助。
Promise.method 是 async functions 的旧版本。考虑到这一点并进行一些语法更正,您的代码将如下所示:
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);
};
const myAction = date => () => date_promise(date);
let promiseWhile = async function (condition, action) {
const queryResults = await action();
if (!condition(queryResults)) {
start_date = start_date.minus(luxon.Duration.fromObject({days: 1}));
return promiseWhile(condition, myAction(start_date));
} else {
return queryResults;
}
};
promiseWhile(
body => body.rows.length > 0,
() => {
return myAction(start_date);
},
).then(result => { // The result you'll get here is queryResults.
// start_date ...
// do something with the date I've obtained
});