2013-12-19 2 views
0

Мне нужно дождаться завершения нескольких вызовов асинхронного вызова до возобновления выполнения. Я попробовал следующий код, используя async.Ожидание множественных асинхронных вызовов с использованием async.each

asana.getUsers(null, function(error, resp){ 
    async.each(resp.data, function(user, cb) { 
     console.log("Get info for user : ", user.id); 
     asana.getUser(user.id, null, function(error, userResp){ 
      console.log("user response: ", userResp.data.id); 
      userEmailList.push({ 
       id : userResp.data.id, 
       name: userResp.data.name, 
       email : userResp.data.email 
      }); 
      cb(null); 
     }); 
     //cb(null); Should the call be here?? 
    }, function(err){ 
     console.log("getUsers is done now"); 
    }); 
}); 

В журнале, что я получаю:

 
Get info for user : xxxxxxxxxxxx 
Get info for user : yyyyyyyyyyyy 
Get info for user : zzzzzzzzzzzz 
Get info for user : aaaaaaaaaaaa 
user response: yyyyyyyyyyyy 

/Code/javaScript/NodeWorkspace/asana-api/mail.js:23 
      console.log("user response: ", userResp.data.id); 
               ^
TypeError: Cannot read property 'data' of null 
    at /Code/javaScript/NodeWorkspace/asana-api/mail.js:23:43 
    at Request._callback (/Code/javaScript/NodeWorkspace/asana-api/lib/asana.js:77:13) 
    at Request.self.callback (/Code/javaScript/NodeWorkspace/asana-api/node_modules/request/main.js:119:22) 
    at Request. (/Code/javaScript/NodeWorkspace/asana-api/node_modules/request/main.js:525:16) 
    at Request.EventEmitter.emit (events.js:95:17) 
    at IncomingMessage. (/Code/javaScript/NodeWorkspace/asana-api/node_modules/request/main.js:484:14) 
    at IncomingMessage.EventEmitter.emit (events.js:117:20) 
    at _stream_readable.js:883:14 
    at process._tickCallback (node.js:415:13) 

Я понимаю, первые журналы, но почему console.log("user response: ", userResp.data.id); линия вызывался с userResp как null.

Я надеюсь, что это не какая-то глупая ошибка. Заранее спасибо.

P.S: В основном мне нужно получить пользователей Asana, а затем получить информацию о каждом пользователе и сохранить в var userEmailList.

+0

Вы проверили 'ошибку'? – thefourtheye

+0

Я получаю эту ошибку 'user response: error [TypeError: Не удается вызвать метод 'push' of undefined]' – CodeRain

+0

Вместо 'userResp.data.id' вы можете отображать' userResp', используя 'inspect (object)' from' util 'модуль? Вы уверены, что это должно быть 'userResp.data.id', а не' userResp.id'? – Tom

ответ

Смежные вопросы