【发布时间】:2018-09-19 01:44:51
【问题描述】:
我似乎无法让 Promise.all 发挥应有的作用。
正如您从日志中看到的那样,“Streak”和“Last Activity”等数据的承诺在最后成功填充。但是我希望 Promise.all 仅在所有内容都填满时才获取数据,此时它在所有内容未定义时在开始时调用一次。
第一次使用 Promise,非常感谢任何建议!
function buildResponse (UserId, weekNumber, yesterday, today, lastLogin) {
let currentStreak;
let getLastActivity;
let weekExercise;
let dayTotal;
let yesterdayTotal;
getUserData(UserId);
getUserData(UserId).then((data) => {
if (!data.Item || !data.Item.UserId) {
console.log("Get User Data Not Found");
} else {
currentStreak = data.Item.streak;
getLastActivity = data.Item.lastActivity;
console.log("Streak is: " + currentStreak);
console.log("Last activity is: " + getLastActivity);
}
});
getUserData(UserId).catch((err) => {
console.log("Get week data error " + err);
});
getWeekData(UserId, weekNumber);
getWeekData(UserId, weekNumber).then((data) => {
if (!data.Item || !data.Item.UserId) {
console.log("Week Data Not Found");
} else {
var yesterdayDay = "Monday";
weekExercise = data.Item.weekTotal;
dayTotal = data.Item.Monday;
yesterdayTotal = data.Item[yesterdayDay];
console.log("Days total is: " + dayTotal)
}
});
getWeekData(UserId, weekNumber).catch((err) => {
console.log("Get week data error " + err);
});
Promise.all([getWeekData(UserId, weekNumber), getUserData(UserId)]).then((data) => {
console.log("Promise all: " + dayTotal + " and " + currentStreak + " and " + getLastActivity);
});
}
获取用户数据:
function getUserData(UserId) {
const docClient = new AWS.DynamoDB.DocumentClient();
const params = {
TableName: "XXXXXXXX",
Key: {
"UserId": UserId,
}
};
return docClient.get(params).promise();
}
日志是:
2018-04-09T15:18:35.348Z 43df7459-3c09-11e8-b44c-1726d06a9efd Promise all: undefined and undefined and undefined
2018-04-09T15:18:35.366Z 43df7459-3c09-11e8-b44c-1726d06a9efd Update last
login succeeded: {
"Attributes": {
"lastLogin": "2018-04-09"
}
}
2018-04-09T15:18:35.387Z 43df7459-3c09-11e8-b44c-1726d06a9efd Streak is: 0
2018-04-09T15:18:35.405Z 43df7459-3c09-11e8-b44c-1726d06a9efd Last activity is: run
2018-04-09T15:18:35.406Z 43df7459-3c09-11e8-b44c-1726d06a9efd Reset Streak succeeded: {
"Attributes": {
"streak": 0
}
}
2018-04-09T15:18:35.426Z 43df7459-3c09-11e8-b44c-1726d06a9efd Days total is: 768
编辑 [09/04/2018]
再次运行它,这一次有两个承诺被履行,但一个没有。关于添加什么以确保 Promise.all 等到所有内容都填满的任何建议?
2018-04-09T15:41:19.427Z 710113a9-3c0c-11e8-a906-cb494b7c4b47 Streak is: 0
2018-04-09T15:41:19.445Z 710113a9-3c0c-11e8-a906-cb494b7c4b47 Last activity is: run
2018-04-09T15:41:19.448Z 710113a9-3c0c-11e8-a906-cb494b7c4b47 Promise all: undefined and 0 and run
2018-04-09T15:41:19.486Z 710113a9-3c0c-11e8-a906-cb494b7c4b47 Update last login succeeded: {
"Attributes": {
"lastLogin": "2018-04-09"
}
}
2018-04-09T15:41:19.486Z 710113a9-3c0c-11e8-a906-cb494b7c4b47 Days total is: 128
2018-04-09T15:41:19.506Z 710113a9-3c0c-11e8-a906-cb494b7c4b47 Reset Streak succeeded: {
"Attributes": {
"streak": 0
}
}
END RequestId: 710113a9-3c0c-11e8-a906-cb494b7c4b47
REPORT RequestId: 710113a9-3c0c-11e8-a906-cb494b7c4b47 Duration: 2008.58 ms Billed Duration: 2100 ms Memory Size: 128 MB Max Memory Used: 38 MB
【问题讨论】:
-
这表明您传递给它的值不是承诺。
-
@KevinB 感谢您的评论,我应该寻找什么来确保价值实际上是一个承诺?
标签: javascript node.js amazon-web-services angular-promise