0

http サービスを呼び出し、結果をループすると、各項目が別の http 呼び出しのキーとして機能します。

それを行う最善の方法は何ですか?

内側の $http 呼び出しが終了する前に外側の $http-loop が終了する可能性があるため、別の $http 呼び出し内から $http を呼び出しても機能しないと思いますか?

// 擬似コード:

$http.get(url).then((response) ->
  foreach response.data as item
        $http.get(item.url).then((response) ->
          foreach response.data as item
        )
  return result
)

本当にうまくいきませんよね?

4

2 に答える 2

2

この疑似コードは問題なく動作します。はthen非同期操作のコールバックです。詳細については、 Angularの promiseを参照してください。

thenコード実行のフローは続行されますが、応答が返されたときにコールバック ( ) が引き続き起動することは間違いありません。

したがって、これは、 にバインドしている場合$scopethenすべて問題なく、データがモデルにバインドされることを意味します。

于 2013-08-22T15:16:12.487 に答える
1

これは正常に機能しますが、配列またはオブジェクトでサブ応答を収集し、$q.all(sub-responses) を返して、呼び出し元がそれらの解決を確実に待機するようにする必要があります。

あなたの疑似コードに固執すると、次のようになると思います:

$http.get(url).then((response) ->
 var r = [];
 foreach response.data as item
    r.push($http.get(item.url))
 return $q.all(r).then((subs) -> foreach ...)
 )
于 2013-08-22T15:20:30.797 に答える