2016-04-01 16 views
-1

のNode.js /表現、javascriptのコールバック関数

/* GET home page. */ 
 
router.get('/home/', function(req, res, next) { 
 

 
    var code = req.query.code; 
 

 
    req.SC.authorize(code, function(err, accessToken) { 
 
    if (err) { 
 
     throw err; 
 
    } else { 
 
     req.session.oauth_token = accessToken; 
 
     // Client is now authorized and able to make API calls 
 
     //res.render('home', { token: accessToken }); 
 
     var url = 'https://api.soundcloud.com/me?oauth_token=' + accessToken; 
 
     requestify.get(url).then(function(response){ 
 
     var user = response.getBody(); 
 
     req.session.user = user; 
 
     var user_url = config.base_url + '/api/users/add'; 
 
     var options = { user: user }; 
 
     requestify.post(user_url, options).then(function(response){ 
 
      console.log("done with users/add") 
 

 
      var href = 'https://api.soundcloud.com/users/' + user.id 
 
       + '/favorites?client_id=' + config.auth.client_id + '&linked_partitioning=1&limit=200'; 
 
      soundcloud.getCollection(req, res, [], href, function(collection){ 
 
      console.log("can't get here..."); 
 
      //console.log(collection); 
 
      res.json(collection); 
 
      //return collection; 
 
      }); 
 
      /* 
 
      var collection_url = config.base_url + '/api/collections/add'; 
 
      requestify.post(collection_url, options).then(function(response){ 
 
      console.log("done with collections/add") 
 
      res.json(response); 
 
      }) 
 
      */ 
 
     }); 
 
     }); 
 
    } 
 
    }); 
 

 
});

function getCollection(req, res, collection, next_href, done){ 
 
    console.log("here"); 
 

 
    requestify.get(next_href).then(function(response){ 
 
     var updatedCollection = collection.concat(response.getBody().collection); 
 
     if (next_href && updatedCollection.length < 500){ 
 
      var href = response.getBody().next_href; 
 
      getCollection(req, res, updatedCollection, href); 
 
     } 
 
     else { 
 
      console.log("done"); 
 
      done(updatedCollection); 
 
     } 
 
     //res.json(response.getBody()); 
 
    }); 
 
}

を実行し得ていない私が見ている行動は、コレクションが適切に構築され、コンソールです。 log( "done")がコンソールに表示されますが、done(updatedCollection)を呼び出した後、渡したコールバック関数は実行されません。印刷ステートメントはありません.Jsonレンダリングもありません。あなたは問題が何であるか見ていますか?

+0

てみてください行なわ(updatedCollection()); –

+1

'updatedCollection'は@BarışÇırıkaという関数ではなく、配列です。 – Andy

+0

@Andyええ、私は今参照してください。私はupdateCollectionを読んでいます。 –

答えて

3

コールバックなしでgetCollection関数を再帰的に呼び出しているため、次回呼び出し時にはdoneは未定義です。

再帰呼び出しへのコールバックを渡すだけでなく

function getCollection(req, res, collection, next_href, done) { 

    requestify.get(next_href).then(function(response){ 
     var updatedCollection = collection.concat(response.getBody().collection); 
     if (next_href && updatedCollection.length < 500){ 
      var href = response.getBody().next_href; 
      getCollection(req, res, updatedCollection, href, done); // <- HERE 
     } else { 
      console.log("done"); 
      done(updatedCollection); 
     } 
     //res.json(response.getBody()); 
    }); 
}