Ожидание нескольких асинхронных вызовов с использованием async.each

Мне нужно дождаться завершения нескольких асинхронных вызовов, прежде чем возобновить выполнение. Я попробовал следующий код, используя 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.


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


Ответы (1)


Проблема заключалась в том, что userEmailList не был определен.

person CodeRain    schedule 09.03.2015