requestReport()
.then(getReportData)
.then(checkReportStatus)
.then(handleData)
checkReportStatus = (data) => {
return new Promise((resolve, reject) => {
if(data.status === 'completed')
resolve(data)
else {
setTimeout(() => getReportData(), 1000)
}
そのため、最初にレポートリクエストを行い、次にレポートが作成されたかどうかを確認する必要があります(ステータスは完了になります)。まだ完了していない場合は、getReportDataを再度呼び出す必要があります。しかし、私は本当に約束と混同しています。私のコードは実際には多くの行であり、約15のチェーンがあります。レポートが完了していない場合に呼び出しを行う正しい方法は何ですか。レポートが完了したときに、handleDataから続行できますか?
編集1:タイプミス
getReportData()
データ(.then()
チェーン内に表示される)で解決され、からの入力パラメーターを必要としないPromiseが返される場合はrequestReport()
、次のようにすることができます。
// utility function that returns a promise that resolves after a delay
// useful for inserting a delay into a promise chain
function delay(t) {
return new Promise(function(resolve) {
setTimeout(resolve, t);
});
}
requestReport()
.then(getReportData)
.then(checkReportStatus)
.then(handleData)
function checkReportStatus(data) {
if (data.status === 'completed') {
return data;
} else {
// retry after a delay
// add retry promise to the current promise chain
return delay(1000).then(getReportData);
}
}
のrequestReport()
引数としての結果が必要な場合は、getReportData()
その情報をPromiseチェーンに渡して、再試行でgetReportData()
使用できるようにします。そのための最善の方法について具体的な推奨事項を提示するには、詳細(どのデータが返されrequestReport()
、どのデータが必要かgetReportData()
)を表示する必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加