[英]javascript adding items to global array in nested function, changes are not reflected outside using gmail api
So i have this code 所以我有这个代码
function addEmail(e){
emails.push(e);
}
var emails = new Array;
function getMessage( messages, callback ) {
var get = function(len){
//console.log(messages[len].id);
var request = gapi.client.gmail.users.messages.get({
'userId': 'me',
'id': messages[len].id
});
request.execute(function(response){
var e = parseMessages(response)
//console.log(JSON.stringify(e));
addEmail(e);
});
len++;
if(len<messages.length){
console.log(emails.length);
get(len);
}
else{
console.log(emails.length);
process(emails);
}
}
get(0);
};
when i am trying to access the emails array outside the method getMessage it is empty. 当我尝试访问方法getMessage之外的emails数组时,它为空。 this line of code "console.log(emails.length);"
此行代码“ console.log(emails.length);” always prints 0,
总是打印0,
however when i put this line of code inside get method, it shows values are being added to the array 但是,当我将这行代码放入get方法中时,它表明值正在添加到数组中
when i am trying to access the emails array outside the method getMessage it is empty.
当我尝试访问方法getMessage之外的emails数组时,它为空。 this line of code "console.log(emails.length);"
此行代码“ console.log(emails.length);” always prints 0
总是打印0
Timing! 定时!
I'm pretty sure, you wanted to build this: 我很确定,您想要构建以下代码:
function getMessage( messages, callback ) {
var emails = [];
get(0);
function get(index){
if(index === messages.length){
return callback(emails);
}
//console.log(messages[index].id);
var request = gapi.client.gmail.users.messages.get({
'userId': 'me',
'id': messages[index].id
});
request.execute(function(response){
var e = parseMessages(response)
//console.log(JSON.stringify(e));
emails.push(e);
get(index+1);
});
}
}
getMessage( someMessages, function(emails){
console.log(emails);
})
or paralell: 或并列:
function getMessage( messages, callback ) {
function done(){
if(--pending) return; //still work left
callback(emails);
}
var pending = 1,
emails = Array(messages.length);
messages.forEach(function(msg, i){
++pending;
var request = gapi.client.gmail.users.messages.get({
'userId': 'me',
'id': msg.id
});
request.execute(function(response){
emails[i] = parseMessages(response);
done();
});
});
done();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.