我正在尝试链接 promise ,但由于某种原因,我的 then 方法没有被调用 - 找不到原因,非常感谢您的帮助。 then - .then((decodedTokenData) 没有被调用,而是返回了整个 Promise。
let handler = async (event) => {
let accessToken = undefined;
let targetGroup = undefined;
const promise = new Promise(() => {
accessToken = event.header.authorization;
targetGroup = event.body.targetGroup;
let promise = decodeAndVerifyToken(accessToken);
return promise;
}).then((decodedTokenData) => {
let isNotGroupMemberResult = isNotGroupMember(decodedTokenData.userGroups);
return setUserGroup(result.userGroups, targetGroup, userPoolId);
}).then(() => {
return true;
});
return promise;
}
let decodeAndVerifyToken = (jwtToken) => {
return new Promise((resolve, reject) => {
jwt.verify(jwtToken, pem, function (err, dToken) {
if (err) {
reject(err);
}
let userGroups = dToken && dToken["cognito:groups"] ? dToken["cognito:groups"] : [];
let username = dToken && dToken.username ? dToken.username : null;
let retval = {
userGroups,
username,
decodedToken: dToken
}
resolve(retval);
})
});
}
let isNotGroupMember = (userGroups) => {
let groupIndex = userGroups.findIndex(groupName => groupName.include(reviewersGroup) || groupName.include(ownersGroup));
let isNotGroupMemberRetval = groupIndex == -1;
return isNotGroupMemberRetval;
}
let setUserGroup = (username, groupname, userPoolId) => {
return new Prmoise((resove, reject) => {
var params = {
GroupName: groupname,
UserPoolId: userPoolId,
Username: username
};
cognitoidentityserviceprovider.adminAddUserToGroup(params, function (err, data) {
if (err) {
reject(err);
} else
resolve(data);
});
});
};
编辑: 我理解我的问题...我阅读了有关 Mozilla Promise 的以下文档: 一旦 Promise 被完成或拒绝,相应的处理函数(onFulfilled 或 onRejected)将被异步调用(在当前线程循环中调度)。处理函数的行为遵循一组特定的规则。如果是处理函数:
returns a value, the promise returned by then gets resolved with the returned value as its value.
我认为它适用于 Promise 和 then 方法 - 但它仅适用于 then 方法......
最佳答案
我不确定我是否正确理解你在这里做什么,但让我尝试一下。
当你执行 new Promise(() => ...whatever...
时,你创建了一个永远不会解析的 Promise,因此 .then()
永远不会被执行. 创建解析为某些结果的 Promise 的正确方法是 new Promise((res) => res(result))
。
节点中的示例:
> const p1 = new Promise(() => 1).then(console.log);
undefined
> p1
Promise { <pending> }
> const p2 = new Promise(res => res(1)).then(console.log);
undefined
> 1
关于javascript - 链式 promise - 返回的 promise 解析不会导致调用 then 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59531174/