0
我一直在撞牆撞牆。我有一些節點代碼,拉扯了一堆googlecalendar事件,然後將這些事件映射到不同的對象結構中以供在我的Web應用程序中使用......作爲此操作的一部分,我需要將Google日曆事件中的用戶與我的Web應用程序中的用戶數據庫。下面的代碼:使用Array.map嵌套承諾,使用Promise.all,但仍然不起作用
router.post('/getCalendar', function(req,res) {
// authentication
var oauth2Client = getOAuthClient();
var session = req.session;
oauth2Client.setCredentials({
access_token: req.user.google.token,
refresh_token: req.user.google.refreshToken,
expiry_date: true
})
var p = new Promise(function (resolve, reject) {
// get the next 20 calendar events
var calendar = google.calendar('v3');
calendar.events.list({
auth: oauth2Client,
calendarId: 'primary',
timeMin: (new Date()).toISOString(),
maxResults: 20,
singleEvents: true,
orderBy: 'startTime'
}, function(err, response) {
if (err) console.log('err',err)
// displays all the events
if (response) console.log('response',response)
if(response) {
var events = response.items;
resolve(events || err);
}
});
}).then(function (data) {
var newdata = data.map(function(item) {
// create the new object structure and populate with some details
newObj = {
_id: item.id,
_title: item.summary,
group: [req.headers.group],
fields: [],
assignedTo: [],
google: "calendar",
googledata: item,
_category: []
}
var extendedFields = {}
// get the list of attendees
attendees = item.attendees.map(function(user) {
var attendee = user.email;
return attendee;
})
// pulls the user information for each attendee using promises
var promises = attendees.map(function(email) {
return new Promise(function(resolve, reject) {
// data is in a mongodb, using mongoose
User.findOne({'google.email': email}).exec(function (err, user) {
if (err) return resolve(null);
resolve(user); //not using reject at all so the Promise.all shouldn't fail
});
})
})
Promise.all(promises)
.then(function(value) {
value.forEach(function(user) {
if(promise !== null) {
newObj.assignedTo.push(user);
}
});
return newObj
}).catch((error) => {console.log(error)})
})
res.json(newdata)
})
});
我使用Promise.all等到所有承諾已經解決,但似乎在完成第一個之前移動到下一個項目data
陣列英寸任何指導都會受到歡迎。請讓我知道是否需要更多細節。
謝謝。
不要忘了'reject'時沒有響應 – Bergi
您需要使用'Promise.all'和'map'爲'data'陣列以及 – Bergi
@Bergi - 我想當我使用'reject'時,那麼'Promise.all'將會失敗......我也不確定如何爲你的建議使用Promise.all作爲'map'和'data'。你能提供一些更多的解釋或例子嗎? –