Мне нужно дождаться завершения нескольких асинхронных вызовов, прежде чем возобновить выполнение. Я попробовал следующий код, используя async.
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
.
error
? - person thefourtheye   schedule 19.12.2013user response: error [TypeError: Cannot call method 'push' of undefined]
- person CodeRain   schedule 19.12.2013userResp.data.id
отобразитьuserResp
, используяinspect(object)
из модуляutil
? Вы уверены, что это должно бытьuserResp.data.id
, а неuserResp.id
? - person Tom   schedule 19.12.2013error
? Фрагмент, который вы разместили, предполагает, чтоasana.getUser()
будет каждый раз находитьuserResp
, что, похоже, не так. По крайней мере, в одном раунде этоnull
, у которого не может быть свойства.data
. - person Jonathan Lonowski   schedule 19.12.2013asana.getUser()
действительно находитuserResp
при индивидуальном вызове. Вот почему я запутался и думаю, что неправильно используюasync.each()
. - person CodeRain   schedule 19.12.2013asana.getUser
? - person robertklep   schedule 19.12.2013