2013-08-12 2 views
1

Я изучаю библиотеку async node.js для реализации курсора (https://dev.twitter.com/docs/misc/cursoring) в node.js.While loop with javascript

whilst выглядит как функция, которую я ищу, но мое дело немного другое. Каждый раз, когда я делаю запрос GET, я должен ждать, чтобы получить ответ, а затем изменить значение курсора.

В async документации это пример Thats приведены для whilst

var count = 0; 

async.whilst(
    function() { return count < 5; }, 
    function (callback) { 
     count++; 
     setTimeout(callback, 1000); 
    }, 
    function (err) { 
     // 5 seconds have passed 
    } 
); 

Я пытался делать что-то вроде его реализовать твиттер курсор навигации, но не делает это не кажется, работает:

async.whilst(
     function(){return cursor != 0}, 
     function(callback){ 
      oa.get(
       'https://api.twitter.com/1.1/friends/list.json?cursor=' + cursor + '&skip_status=true&include_user_entities=false' 
       ,user.token //test user token 
       ,user.tokenSecret //test user secret 
       ,function (e, data, res){ 
        if (e) console.error(e); 
        console.log("I AM HERE"); 
        cursor = JSON.parse(data).next_cursor; 
       } 
     ) 
     }, 
     function(){ 
      console.log(cursor);//should print 0 
     } 
) 

EDIT: console.log («Я ЕСМЬ ЗДЕСЬ») в моем запросе на запрос запроса вызывается только один раз, и после этого ничего не происходит.

Я не думаю, что функция в середине должна иметь функцию обратного вызова, которая изменяет счетчик и whilst работает только тогда, когда счетчик изменяется в реальной функции не на его обратный вызов ..

+4

http://stackoverflow.com/questions/18156937/while-loop-in-javascript-with-a-callback/18158547#comment26655506_18158547 ответ без использования асинхров были дано здесь .. –

+0

Вы можете уточнить, как «Кажется, он работает?» Какую ошибку вы видите при запуске скрипта? –

+0

Что касается вашего редактирования, это нормально, когда обратный вызов изменяет переменную 'counter'. Можете ли вы попробовать распечатать «данные» в обратном вызове, чтобы узнать, какой ответ вы получаете от Twitter? –

ответ

1

async.whilst использует обратные вызовы, чтобы знать, когда ваш «рабочая» функция выполняется, поэтому не забудьте всегда вызывать параметр callback, который async.whilst переходит к функции, которую вы даете ей в качестве второго параметра, когда вы готовы к следующему циклу цикла.

0

Я думаю, что нам не хватают обратный вызов внутри «процесса» функции

что-то вроде:

async.whilst(
     function(){return cursor != 0}, 
     function(callback){ 
      oa.get(
       'https://api.twitter.com/1.1/friends/list.json?cursor=' + cursor + '&skip_status=true&include_user_entities=false' 
       ,user.token //test user token 
       ,user.tokenSecret //test user secret 
       ,function (e, data, res){ 
        if (e) console.error(e); 
        console.log("I AM HERE"); 
        cursor = JSON.parse(data).next_cursor; 
        callback(null, cursor); 
       } 
     ) 
     }, 
     function(){ 
      console.log(cursor);//should print 0 
     } 
) 

уведомления нуля первых пар свойственно ошибаться для сеансов рода стандарта.

Надеюсь, что это поможет кому-то. С уважением