Я отвечу на это концептуально.
Когда вы вызываете асинхронную функцию c, она немедленно возвращает обещание области кода, которая вызвала эту функцию.
Внутри Функция asyn c, вам не нужно использовать resolve
и reject
. Вместо этого вы можете просто использовать return
и throw
. То, что вы когда-либо return
, - это то, к чему обещание примет Если вы throw
, то это обещание будет «отклонено». Попробуйте что-то вроде этого:
async function getUser() {
try {
const userResponse = await axios({
method: 'post',
url: "some_url",
data: "some string data",
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
});
if (userResponse.data.status === 'success') {
return validateResponse.data;
} else {
throw new Error(validateResponse.data);
}
} catch (error) {
throw error;
}
}
После выхода async / await я перестал любить синтаксис then
при работе с обещаниями. Чтобы избежать then
, вызовите getUser
из тела asyn c функции. Если вы не вызываете getUser
из тела асинхронной c функции, вы не сможете await
разрешить то, к чему она относится; вам придется использовать then
вместо этого. Или вы можете обернуть этот вызывающий код в , немедленно вызванную asyn c функцию , просто чтобы вы действительно могли использовать await
. Вот грубый пример того, как мой код (который вызывает getUser
) может выглядеть:
(async function()
{
let user = await getUser();
if(!user)
{
console.error(`Access Denied`);
return;
}
// Rest of your code that should only run when you have a user goes here.
})();
Единственная причина, по которой я обертываю код выше в немедленно вызываемой асинхронной c функции, заключается в том, что я можно использовать await
вместо then
для разрешения этого обещания.