2016-04-08 17 views
0

Belirli bir kullanıcının hem tweet'lerini hem de bahsini almayı denerken twitter API ile çalışıyorum, ancak yalnızca belirli bir tweet kümesini yalnızca zaman. Gördüğüm benzer bir soruya göre, bu sorunu çözmek için bir geri arama fonksiyonu gerekecektir, ancak node.js. için oldukça yeni olduğum için mücadele ediyorum. Benim sorunum tweets ve bahsler için iki client.gets var ama ben sadece bir anda arayabilir, böylece bir geri arama fonksiyonu gereklidir.Node.js'de twitter api kullanırken geri çağırma işlevi nasıl uygulanır

jsonx = {}; 
    function mentions(x){ 
    client.get('search/tweets', {q:"@"+x, count:1}, 
    function (err,data){ 
     for(var index in data.statuses){ 
     var tweet = data.statuses[index]; 
     console.log(tweet.text); 
     jsonx[index] = tweet 
     } 
     res.end(JSON.stringify(jsonx)) 
    }) 
    } 


    function tweets(y){ 
    client.get('statuses/user_timeline', {screen_name:"@"+y, count:1}, 
    function(err,data) { 
     for(var index in data){ 
     var tweet = data[index]; 
     console.log(tweet.text); 
     jsonx[index] = tweet 

     } 
      res.end(JSON.stringify(jsonx)); 
    }) 
    } 

i tweets tüm sorguları almak amacıyla işlevi çağrısını geri uygulamak ve aynı zamanda söz nasıl üzerinde herhangi bir yardım.

Promises, hatta sadece 'Promisifying' Bu gerçekten kolay kılacak şimdi sahip kütüphane kullanan bir heyecan istemci kullanmak size Steve

+0

sahip bir geri çağırma işlevi iki farklı client.get eşzamanlı aramalar mümkün değildir yanıt vermek. Neden bunu yapmak istediğini söyler misin, belki bir geçici çözüm önerebilirim? – trans1st0r

+0

@DevJyotiBehera Her iki işlevden aldığım tüm tweetleri toplamak ve aynı JSON nesnesine eklemek istiyorum. –

cevap

3

ederiz.

Bunu yapmak için Bluebird.js'yi öneririm.

1) söz kütüphanesini gerektir (NPM aracılığıyla yükledikten sonra)

var Promise = require('bluebird'); 

2) Bluebird en kullanarak isteklerini yapmak için yeni bir işlev olun: o yoldan gitmek için olsaydı, bu işe nasıl olduğunu metodu promisify.

var clientGet = Promise.promisify(client.get, client); 

3), örneğin join ile aynı zamanda iki istek, yapmak için bir agrega söz yöntem kullanınız. Eğer tek bir nesnede hem işlevinin sonuçlarını depolamak istediğiniz beri

Promise.join(
    clientGet('search/tweets', {q:"@"+x, count:1}), 
    clientGet('statuses/user_timeline', {screen_name:"@"+y, count:1}), 
    function(tweets, timeline) { 
     //other stuff here, including res.end/json/send/whatever 
    } 
) 
0

, bir en iyi uygulama olarak async modülünü kullanabilirsiniz.

var async = require('async'); 

async.series([ 
    function(_cb){ 
    //call function 1 here and fire _cb callback 
    }, 
    function(_cb){ 
    //call function 2 here and fire _cb callback 
    } 
], function(error, response) { 
    if(e) { 
    //handle error 
    } 
    else { 
    //handle response object here. It will be an array of responses from function_1 and function_2 
    } 
});