2017-03-08 18 views
0

複数の約束事を処理したい、たとえばkouta APIが複数のサイトを返す場合、私はサイトでループを作成してカテゴリを1つずつ取得します。エラー処理のforループで複数の約束事を処理する

ノードコード:

request({ 
     url: 'https://cbatest.kounta.com/v1/companies/20155/sites.json', 
     headers: header_data, 
     json: requestData, 
     method: 'GET', 
    }, function (err, response, body) { 
     var site_list = body; 
     //res.send(site_list); 
     var promises = []; 
     for (let i = 0; i < site_list.length; i++) { 
      var cat_list = new Promise(function (resolve, reject) { 
       var site_id = site_list[i].id; 
       var category_arr = []; 
       request({ 
        url: 'https://cbatest.kounta.com/v1/companies/20155/sites/' + site_id + '/categories.json', 
        headers: header_data, 
        json: requestData, 
        method: 'GET', 
       }, function (err, response, body) { 
        var category_list = body; 
        resolve(category_list); 
       }); 
      }); 
      cat_list.then(function (result) { 
       promises.push(result); 
       console.log(promises); 
       res.send(promises) 
      }).catch(function (err) { 
       console.log(err); 
      }) 
     } 
    }); 

問題:にconsole.log(約束)。 last idとres.send(約束)のためだけに働きます。 1回だけ作業してください。私は何が足りないのですか?

ありがとうございます。

答えて

1

あなたのコードは、解決された最初の約束のためだけに結果を送信します。

それはasync

から使用することをお勧めしますと、コードは次のように次のようになります。

request({ 
     url: 'https://cbatest.kounta.com/v1/companies/20155/sites.json', 
     headers: header_data, 
     json: requestData, 
     method: 'GET', 
    }, function (err, response, body) { 
     var site_list = body; 
     //res.send(site_list); 
     var promises = []; 

    async.map(site_list, function(site, callback){ 
       request({ 
        url: 'https://cbatest.kounta.com/v1/companies/20155/sites/' + site.id + '/categories.json', 
        headers: header_data, 
        json: requestData, 
        method: 'GET', 
       }, function (err, response, body) { 
        var category_list = body; 
        callback(null, category_list); 
       }); 

    }, function(err, result){ 
     if(err) return res.send(err); 

     //result is array of arrays. you can shape it like you want 
     res.send(result); 
    }); 

    }); 
関連する問題