Вы получаете эту ошибку, потому что ваша функция getDiscourseId
не возвращает значение.
Если вы добавите ключевое слово return
перед вашим вызовом fetch(...)
, вы должны начать двигаться вперед..
Возможно, вы также захотите удалить .catch
изнутри getDiscourseId
и вместо этого добавить его в конец вызова до getDiscourseId
внутри вашего обработчика:
exports.handler = (event, context, callback) => {
getDiscourseId(username)
.then((userId) => {
callback(null, {
statusCode: 200,
headers: {},
body: JSON.stringify({
userId: userId
})
});
})
.catch(error => {
callback(null, {
statusCode: 500,
headers: {},
body: JSON.stringify({
message: "Internal server error custom: " + error
})
});
});
};
function getDiscourseId(username) {
console.log({username: username, discourseApiKey: discourseApiKey, discourseApiUser: discourseApiUser})
return fetch(`https://${domain}/users/${username}.json?api_key=${discourseApiKey}&api_username=${discourseApiUser}`, {
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json'
},
method: 'GET',
})
.then(response => {
if (!response.ok) { // h/t TJ Crowder
throw new Error("Failed with HTTP code " + response.status);
}
return response.json();
})
.then(data => {
if (data) {
return data.user.id;
}
});
}
РЕДАКТИРОВАТЬ: TJ Crowder правильно, что вы, вероятно, хотите обрабатывать ответы 4xx и 5xx как полные ошибки.Я бесстыдно украл его пример кода из его блога и добавил его к вышесказанному.