私はpromise
にラップされたコードをいくつか持っています。このコードは、リモートDB内のいくつかのレコードを編集し、編集されたレコードの数を返します。編集したレコードの数が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'の後で解決していません。約束はいつも最終的に解決されるか、または拒否される必要があります。 – Eric
@ErikKralj、もし最初の例を 'if(count> 0)'の後に書いているなら、 '.then(...)'の後に返された結果をチェックする必要があります。何度もやり直してください... –