2016-04-22 28 views
-1

AngularJSの新機能です。私のプロジェクトでは、私は時々マルチ$ httpリクエストを呼び出すでしょう。しかし、$ http要求の前に成功したデータは、次の$ http要求のパラメータです。

は、私はこれを試してみる:

$http.post(URL1, params1).success(function(data){ 
    $http.post(URL2, data.result).success(function(){ 
      ...... 
    }) 
}).error(function(err){}) 

をしかし、それは複雑かつそれを処理するのは難しいを作ります。それを復活させるには?ありがとう。

+0

これは、平行ではありません。これらはネストされた順次呼び出しです。 – skubski

+0

ありがとう、私は私の質問のタイトルを編集します:) –

+0

'.success'を使用すると、' .then' – webduvet

答えて

0

これは、あなたがこのよう

var FlightDashboard = function($scope, user, travelService, weatherService) 
    { 
     // Level 1 
# 
     travelService 
      .getDeparture(user.email)     // Request #1 
      .then(function(departure)    // Response Handler #1 
      { 
       $scope.departure = departure; 
# 
       // Level 2 
# 
       travelService 
        .getFlight(departure.flightID)  // Request #2 
        .then(function(flight )    // Response Handler #2 
        { 
         $scope.flight = flight; 
# 
         // Level 3 
# 
         weatherService 
          .getForecast(departure.date)  // Request #3 
          .then(function(weather)   // Response Handler #3 
          { 
           $scope.weather = weather; 
          }); 
        }); 
      }); 
    }; 
1

ようですが、非同期操作async moduleを制御することは非常に簡単ですか、非同期のように、より良い伐採であるvasyncを使用することができ、それを行うことができます例です。

var postSomething1 = function(cb) { 
    $http.post(URL1, params1).success(function(data){ 
     cb(null, data); 
    }) 
    .error(cb); 
}; 
var putSomething = function(cb) { 
    $http.put(URL1, params1).success(function(data){ 
     cb(null, data); 
    }) 
    .error(cb); 
}; 

var tasks = [ 
    postSomething, 
    putSomething 
]; 
var done = function(err, result){ 
    console.log("Complete with err", err, " result", result); 
}; 

async.parallel(tasks, done); 

あなたはより多くのメソッドを持っているとして、あなたはこのようにリファクタリングすることができます実現:

var call = function(method, url, params) { 
    return function(cb) { 
     var method = method.toLowerCase(); 
     $http[method](url, params).success(function(data){ 
      cb(null, data); 
     }) 
     .error(cb); 
    }; 
}; 
var tasks = [ 
    call('POST', 'http://example.com/create/event', { event_name: 'Cool' }), 
    call('PUT', 'http://example.com/update', { name: 'Jon' }), 
    call('PUT', 'http://example.com/event/enable', { enable: true }), 
    call('GET', 'http://example.com/list/34') 
    ... 
]; 
var done = function(err, result){ 
    console.log("Complete with err", err, " result", result); 
}; 

async.parallel(tasks, done);  
関連する問題