![](/img/trans.png)
[英]Items added to a global array variable do not persist outside of the adding function
[英]javascript adding items to global array in nested function, changes are not reflected outside using gmail api
所以我有这个代码
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);
};
当我尝试访问方法getMessage之外的emails数组时,它为空。 此行代码“ console.log(emails.length);” 总是打印0,
但是,当我将这行代码放入get方法中时,它表明值正在添加到数组中
当我尝试访问方法getMessage之外的emails数组时,它为空。 此行代码“ console.log(emails.length);” 总是打印0
定时!
我很确定,您想要构建以下代码:
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);
})
或并列:
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.