我有一個未定義的數組,它在得到填充的for循環後得到解決的問題。它看起來像如下:在for循環中解析數組undefined後未定義數組
function mainFunction() {
getUnreadMails().then(function(mailArray) {
// Do stuff with the mailArray
// Here it is undefined
})
}
function getUnreadMails() {
var mailArray = [];
return new Promise(function(resolve, reject) {
listMessages(oauth2Client).then(
(messageIDs) => {
for(var i = 0; i < messageIDs.length; i++) {
getMessage(oauth2Client, 'me', messageIDs[i]).then(function(r) {
// Array gets filled
mailArray.push(r);
}, function(error) {
reject(error);
})
}
// Array gets resolved
resolve(mailArray);
},
(error) => {
reject(error);
}
)
});
}
兩個listMessages()
和getMessage()
返回一個承諾,所以在這裏鏈。任何想法,爲什麼我得到一個undefined mailArray
?我的猜測是,它在解決問題時還沒有填充。其次,我認爲這個流程不是一個好的做法。
'getMessage'看起來像是異步的。這是行不通的,因爲你在調用getMessage之前調用resolve函數 –
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all – epascarello
@JoshuaK正是我的想法。這怎麼做到正確? – ffritz