【发布时间】:2018-05-27 12:54:25
【问题描述】:
我有一些包含在promise 中的代码。此代码将编辑远程数据库中的一些记录,并返回已编辑记录的数量。如果编辑的记录数大于0(即,一些工作已经完成),那么我想一次又一次地运行相同的方法,直到我得到一个0(即不再需要记录)编辑)。
我尝试了一些不同的方法,但它们都不会终止(即未调用解析)或者它们无法正常运行。
我尝试的第一个版本:
const doEdits = () => {
return new Promise((resolve, reject) => {
someDB.performEdits()
.then(count => {
if (count > 0) {
doEdits()
} else {
resolve()
}
})
.catch(reject)
})
}
return new Promise((resolve, reject) => {
someDB.init()
.then(doEdits)
.catch(reject)
})
我试过的第二个版本:
const doEdits = () => {
return new Promise((resolve, reject) => {
someDB.performEdits()
.then(count => {
resolve(count)
})
.catch(reject)
})
}
return new Promise((resolve, reject) => {
someDB.init()
.then(doEdits)
.then(count => {
if (count > 0 ) {
return doEdits() // 'doEdits()' did not work...
} else {
resolve()
}
})
.catch(reject)
})
欢迎提出任何建议。
【问题讨论】:
-
您在
doEdits之后没有解析。 Promise 的结尾总是需要resolved或rejected。 -
@ErikKralj,如果您在谈论第一个示例,然后在
if (count > 0)之后,那么我需要在它之后执行.then(...)并检查返回的结果并再次执行再等等……
标签: javascript node.js loops recursion promise