JavaのPromiseオブジェクトの値を同期的に取得する必要があります。Javascript Promiseの値を同期的に取得する
PromiseオブジェクトはJavascriptで動作し、その利点と、then
メソッドで値を処理する方法は分かっていますが、特にNode.jsの使用例があります(ただし、これはブラウザエンジンにも当てはまります)。 )ただし、値を返す必要がありますが、プロミスオブジェクトを返すAPIを呼び出していて、そのAPIまたはコンシューマAPIのシグネチャを変更することはできません。
たとえば、Java言語では、アクションを完了するために必要な場合(実行をブロックする)を待機させ、その結果を戻す方法があります(get()
)。待ち時間がタイムアウトした場合は、でも起動するまでの最大待ち時間はTimeoutException
です。
私が持っている問題は、このようなものです:
api1.setCallBackThatHasToReturnANoPromiseValue(
function(p1, p2) {
return api2.getPromisedValue(p1,p2) // This returns a Promise
.get() // -> but something like this
// could get the value in a sync way
}
);
私は非同期プログラミングでこれを解決することができれば、誰かが私に言うことはできますか?
非同期コードで修正できる特定の問題にかかわらず、Promiseの値を同期方法で取得する方法があります(実行をブロックし、すべてのパフォーマンスの問題があることがわかっています。 "bla bla ...")。
あなたはこれらの概念について混乱していると思います。コード*は* asyncなので、約束が必要です。それが同期的に行えるのであれば、約束は始める必要はありません。これがNodeJSにある場合は、多くのメソッドの同期バージョンがありますが、それが利用できない場合、答えは「いいえ」です。 –
この約束は事実上非同期の世界にあります。何かが非同期にトリガーされると、それを再び同期させる方法はありません。 –
@squint私が言ったように、私は2つの異なるAPIを扱っているので、私は約束を使用し、もう1つはそうでないという事実を変更することはできません。サンプルコードを見て、それを解決する方法を教えてください。 – Mrdev