【发布时间】:2021-06-17 21:34:24
【问题描述】:
我想知道为什么代码是这样工作的:
async function Signin({ email, pass, confirmpass }) {
const body = {
'email': email,
'pass': pass,
'confirmpass': confirmpass,
};
const params = {
endpoint: 'register_user',
method: 'post',
headers: null,
body: body
}
const result = await api.connect(params);
console.log(result);
}
但它不是这样工作的:
async function Signin({ email, pass, confirmpass }) {
let result = await registerUser({ email, pass, confirmpass, });
console.log(result);
// TODO: api call 2
// TODO: api call 3
}
async function registerUser({ email, pass, confirmpass }) {
const body = {
'email': email,
'pass': pass,
'confirmpass': confirmpass,
};
const params = {
endpoint: 'register_user',
method: 'post',
headers: null,
body: body
}
return api.connect(params);
}
它记录以下错误:Possible Unhandled Promise Rejection
我必须对 api 进行三个调用,因此为了使其更具可读性和更易于维护,我想在不同的函数中进行 api 调用。
我对 JS Async/Await 没有太多经验,我刚开始使用它是因为我需要在 React Native 中做一些事情,我之前是 PHP 的。
更新:我确实喜欢@safder 说 onj 评论并使用了 try catch 但现在它不等待结果
async function Signin({ email, pass, confirmpass }) {
try {
let result = await registerUser({ email, pass, confirmpass, });
console.log(result);
} catch {
}
// TODO: api call 2
// TODO: api call 3
}
async function registerUser({ email, pass, confirmpass }) {
let result = null;
const body = {
'email': email,
'pass': pass,
'confirmpass': confirmpass,
};
const params = {
endpoint: 'register_user',
method: 'post',
headers: null,
body: body
}
try {
result = api.connect(params);
} catch {
}
return result;
}
【问题讨论】:
-
你遇到了什么错误?
-
@Safder 可能的未处理承诺拒绝
-
您需要将其包装在 try/catch 块中以进行异步/等待
-
未处理的 Promise 拒绝意味着您在调用异步函数时没有将其包装在
try ... catch块中或使用.catch()来捕获任何潜在错误。 -
你有一个多余的
try/catch。您可以只使用return api.connect(params)并将try/catch保留在呼叫站点周围 (let result = await registerUser)
标签: javascript react-native asynchronous async-await