私はcontentRecordHelperというライブラリを使用するプロジェクトに取り組んでいます。 contentRecordHelper.addTitleFilter()を使用してレコードオブジェクトを実行すると、そのレコードの種類に基づいてさまざまなプロパティの集合がレコードに設定されます。前条件が真実であることを単に待つ約束を書くことができますか?
レコード:
{
"_title": "Test Record",
"_type": "content",
"_id": "029828ABF"
}
それはcontentRecordHelper.addTitleFilter(通過しています後にレコード):
{
"_title": "Test Record",
"_type": "content",
"_id": "029828ABF",
"server_id": "VAL8378",
"client_id": "SIRIUS",
"$titleFilter":"General",
"$contentFilter": "Standard:ContentRecord",
"$contentType":"",
"$systemType":""
}
あなたは上から見ることができるように、空になって最後に追加した2つの属性があります:$ contentTypeと$ systemType。これらの2つは、contentRecordHelper.addTitleFilter()内で開始され、約1000ms後に追加される非同期関数によって生成されるためです。
ただし、このデータが生成されるとすぐに、グリッドに渡されます。情報が更新されていれば、そのグリッドを更新して、正しく表示できるようにする必要があります。幸い、そうするためにgrid.refreshGrid()関数があります。私のコードは次のようになりますので、私は、タイムアウトでそれを呼び出すされています:
function addRecordToGrid(record: any): void {
this.contentRecordHelper.addTitleFilter(record);
this.grid.rowData.push(record);
setTimeout(() => {
this.grid.refreshGrid();
}, 1000);
}
今、厳密にこれが正常に動作しますが、私のシニア開発者の一つは、我々はハード千ミリ秒に頼るべきではないことを私に指摘話しますこれは遅いバックエンド接続の場合には常に信頼できるとは限らないためです。彼は代わりに、私は約束を使用する必要がありますので、すぐに記録する必要があります。$ systemType & &レコード。$ contentTypeが存在するので、grid.refreshGrid()を呼び出します。そして、彼は正しい - それは完璧な意味がある。唯一の問題は、私が前に約束を書いたことは一度もありません。私が見つけることができるすべての例は、非同期関数を呼び出して、完了するのを待ちます。私の場合、contentRecordHelper.addTitleFilter()は、結果の特定の部分が後で到達しなくてもほぼ即座に完了します。
私は、ちょうどちょうどと同じように、(レコード。$ systemType & &レコード。$ contentType)のように条件が真であるのを待つという約束を書くことができますか?それが不可能な場合、私の問題を解決する約束を使用するための最良の方法は何ですか? contentRecordHelper.addTitleFilter()を変更せずにこれを行うことは可能ですか?その機能の背後にあるメカニズムは非常に複雑で、もし私がそれに変更を加えることを避けることができれば、私に多くのストレスを与えません。
私が作業しているプロジェクト(および一般的にはタイスクリプト)にはかなり新しいので、これが明らかであれば謝ります。
'contentRecordHelper.addTitleFilter'はコールバック引数を取っていない、または約束を返していませんか?ほとんどの非同期関数はそうしていますが、そうでない場合はそうする必要があります。 –