javascript函数中的axios返回数据
我有两个javascript文件 一: main_app.jsjavascript函数中的axios返回数据,javascript,axios,Javascript,Axios,我有两个javascript文件 一: main_app.js import * as API from "./api.js"; const pin = API.getPin(); console.log(pin); 另一个是api.js const baseUrl = "https://some.com/api"; export function getPin() { try { axios.post(baseUrl, { metho
import * as API from "./api.js";
const pin = API.getPin();
console.log(pin);
另一个是api.js
const baseUrl = "https://some.com/api";
export function getPin() {
try {
axios.post(baseUrl, { method: "pin" }).then((res) => console.log(res));
} catch {
console.log("Fail");
}
}
在第一个文件中,我需要保存getPin()的输出,但我总是在控制台中得到Promise-pending。
在axios调用和.then方法中,我可以console.log正确的数据,但无论我尝试什么,都无法返回数据
我也尝试过异步并等待,但没有结果
export async function getPin() {
try {
const res = await axios.post(baseUrl, { method: "pin" }).then(res => res.data);
return res.data;
} catch {
console.log("Fail");
}
}
我尝试过es6中的课程,但结果相同,然后认为我可能没有正确使用该课程:
export class Api {
static baseUrl = "https://some.com/api";
static response = null;
static getPin() {
const body = { method: "pin" };
axios
.post(this.baseUrl, body)
.then((res) => (this.response = res.data))
.catch((err) => console.error(err));
}
}
我看过很多文章,我确信我遗漏了一些明显的东西,但我正在失去理智:-(
任何帮助都将不胜感激
编辑:不是一个重复的问题。我重新做了这个课程,看起来像这样
export default class API {
static baseUrl = "https://some.com/api";
static response = null;
static pin = null;
static getPin() {
axios
.post(this.baseUrl, { method: "pin" })
.then((res) => (this.pin = res.data.pin));
return this.pin;
}
}
但是这仍然不能像我所需要的那样工作。请帮助在axios上使用
异步/await
模式时,则不需要。等待axios.post
暂停代码的执行,直到承诺得到解决并从API调用返回数据,从而允许res.data
包含r来自API的响应。请参阅下面的示例之一的修改版本:
导出异步函数getPin(){
试一试{
//而不是这一行:
//const res=await axios.post(baseUrl,{method:“pin”});
//请尝试以下操作,注意.then()已删除
const res=await axios.post(baseUrl,{method:“pin”});
//res包含来自API调用的响应,无需使用。然后。
//您可能希望将console.log(res.data)放在这里,以查看首先返回的内容。
返回res.data;
}捕获(e){
日志(“错误:”,e);
}
}
在您的main_app.js
中,您需要修改代码,因为API.getPin()
是一个异步API调用,这就是您得到承诺的原因
import*作为API从“/API.js”导入;
让平叶;
异步函数callAPIandSetPin(){
//必须等待,因为API.getPin()是异步的。
const pin=await API.getPin();
控制台日志(pin);
//如果出于任何原因需要全局pin,您可以从这里进行修改。
pinGlobal=pin;
}
callapiandpin();
导出函数getPin(){
函数不返回任何内容导出异步函数getPin()
函数返回将作为数据的承诺(除非有错误)静态getPin(){
函数不返回任何内容这回答了您的问题吗?在所有情况下const pin=API.getPin()
…pin将是一个承诺…在代码1和3的情况下,未定义
-在代码2的情况下,您需要的数据将在该承诺中解析,谢谢,但这仍然会返回一个承诺。我现在疯了:-)我不明白为什么这么复杂,或者我仍然缺少一个要点。我想要的只是从接收到的返回数据API@JakubKoudela,我只是做了一个编辑来进一步解释你需要做什么。这有帮助吗?