Webサイトから一連のデータをフェッチする必要がある単純なWindows8アプリに取り組んでいます。WinJS.xhr()を使用してこのデータを取得し、Promiseを返します。次に、このPromiseの.then()メソッドにコールバックを渡します。これにより、非同期呼び出しからの戻り値がコールバックに提供されます。.then()メソッドは別のPromiseを返し、コールバックが返す値を返します。このようなクエリの基本構造は次のようになります。
WinJS.xhr({ url: "http://www.example.com/" }).then(
function callback( result_from_xhr )
{
//do stuff
return some_value;
}).then(
function secondcallback( some_value )
{
//do stuff
});
ただし、私の状況では、最初のクエリによって返されたデータに応じてデータに対して追加のクエリを実行する必要があり、そのデータに応じてさらに多くのクエリを実行する必要がある場合があります...など。
次のように、すべての再帰が完了するまでfinal .then()が実行されないようにこれをコーディングする方法が必要です。
function recurse() {
return WinJS.xhr({ url: "http://www.example.com/" }).then(
function callback( result_from_xhr )
{
if( result_from_xhr == something )
{
recurse();
}
});
}
recurse().then(
function final()
{
//finishing code
});
問題は、もちろん、最初のレベルの再帰が完了するとすぐに終了コードが呼び出されることです。コールバック内から新しいpromiseと古いpromiseをネストする方法が必要です。
私の質問が十分に明確であることを願っています。それを説明する方法が本当にわかりません。率直に言って、非同期再帰コードのアイデアは頭を痛めます。