我有一条路线,我想获取提供给它的数据并在http请求中发送它,并在我的路线中返回响应。我所做的是,我拥有此调用函数,该函数可以发送http请求并返回响应
async function call() {
axios
.post("https://jsonplaceholder.typicode.com/posts", {
title: "foo",
body: "bar",
userId: 1,
})
.then((res) => {
return { answer: 30 };
})
.catch((error) => {
console.error(error);
});
}
我试图在路由中调用它,但是它没有等待http请求完成。
答案 0 :(得分:1)
如果您试图让call()
的呼叫者能够等待您的axios结果,那么您需要做两件事:
axios.post()
的承诺.then()
或await
。.catch()
中吃错了。如果您.catch()
只是为了登录并且仍然希望拒绝返回给调用者,则必须重新抛出该错误。在这种情况下,呼叫者似乎应该捕获并记录错误。这是执行这些操作的代码:
function call() {
return axios.post("https://jsonplaceholder.typicode.com/posts", {
title: "foo",
body: "bar",
userId: 1,
}).then((res) => {
return { answer: 30 };
});
}
call().then(result => {
console.log(result);
}).catch(err => {
console.log(err);
});
此外,这里没有理由使用async
。 async
没有魔力知道何时完成函数内的异步操作。您仍然必须返回承诺或对每个承诺使用await
。在这种情况下,由于您没有使用await
,因此没有理由使用async
,因此我将其删除,因为您只需返回您的一个承诺即可。
答案 1 :(得分:0)
我更喜欢@ jfriend00的答案,但这是使用async / await的答案
async function over() {
async function call() {
return await axios
.post('https://jsonplaceholder.typicode.com/posts', {
title: 'foo',
body: 'bar',
userId: 1,
})
.then((res) => {
return { answer: 30 };
})
.catch((error) => {
console.error(error);
});
}
let result = await call();
console.log(result);
}
over();