あなたがすべてのリファクタリングとコールバックについて叫んで開始する前に、完全に、私はJavaScriptで次のような状況を持っている(私は他のオプションを持っていないときに...)
:)をしてください質問を読んで(便宜上簡略化したコード):
function myFunc(){
var myItems = getItemsAsync(); //this returns a promise
return {
settings: {
type: "items",
component: "accordion",
items: myItems //WRONG! This is a promise, not the data itself!
}
}
}
は、ここでの状況です:私はmyFunc
を呼び出し、返されたオブジェクト{settings: etc...}
がitems
サブオブジェクトを含む、既に入力されたすべての値を、持っていることを期待外部のフレームワークを持っています。私はこのフレームワークがmyFunc
をどのように呼び出すかを制御していないので、約束または部分的な結果を受け入れるように変更することはできません。
ここでわかるように、ここに問題があります:items
を取得するには、私は非同期のAPIを呼び出す必要があり、約束を返します。残念ながら、このAPIも私のコントロール外です。したがって、同期して動作するようにこのAPIを変更することはできません。
基本的に私は膠着状態にあります:完全にオブジェクトを返す必要がありますが、そのオブジェクトの断片の1つは非同期的にしか取得できません!!
この問題を避ける方法はありますか?私がここで見てきた同様の質問はすべて、約束を待つことができないことを示唆しています...それは本当ですか?
"あなたはコール者かAPIのどちらかを変更する"と言いたいのは分かっていますが、残念ながらそれらは私のコントロールできない既存のシステムの一部であるため、変更する(理由は技術的ではなく官僚的な理由による)
これを解決するためのアイデアはありますか?
この記事をチェックしてくださいhttps://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests – MysterX
myFuncが非同期的に取得したものを返す必要がある場合、同期的に値を返すことはできませんmyFuncの呼び出し方法を変更する必要があります。非同期の結果を同期させる方法はありません。ちょっと考えただけで、なぜこれが不可能なのか分かりません。 –
@JaromandaX:ポーリング/待っていなくても?申し訳ありませんが、これは愚かな音が、私はjavascriptの専門家ではない...なぜこれを行うことはできません? –