سلام به همگی.
دوستان بنده در حال توسعه یک پکیج نود برای یک API هستم.
مشکلی که هست اینه که وقتی از axios یا حتی fetch داخل متد های کلاس استفاده میکنم، undefined بر میگردونه.
کد به صورت زیر هستش :
const axios = require('axios');
class MyAPI {
constructor(access_token) {
this.__access_token = access_token;
}
getAll() {
axios.get("https://example.com/api", {
headers: {
'Authorization': this.__access_token
}
}).then((res) => {
return res.data;
}).catch(error => {
return error;
});
}
}
let api = new MyAPI("L8VFyeMzDyOLW0DUa");
let allData = api.getAll();
console.log(allData);@ali.bayat @hesammousavi @milad
تاپیک داشت پایین، میرفت تگ کردم!
شما نظری ندارید بزرگواران ؟
احتمالا شما فراموش کرددید که جاوااسکریپت کدهاش به شکل non-blocking یا همون async اجرا میشه
حالت زیر درست هست نه چیزی که نوشتید.
const axios = require('axios');
class MyAPI {
constructor(access_token) {
this.__access_token = access_token;
}
getAll() {
return axios.get("https://example.com/api", {
headers: {
'Authorization': this.__access_token
}
});
}
}
let api = new MyAPI("L8VFyeMzDyOLW0DUa");
let allData = api.getAll();
allData.then((res) => {
console.log(res.data);
}).catch(error => {
return error;
});
البته میشه از async/await هم بهره برد
شاید پاسخ شما همینجا باشد
@hesammousavi
چون دارم یه ماژول می نویسم نمیتونم عملیات رو به اون صورت انجام بدم! آیا راهی هست که مستقیم در متد دیتا رو ریترن کنم ؟
@hesammousavi
از async هم استفاده کردم جواب نداد :|
@hesammousavi
از کد زیر استفاده کردم و جواب نداد :
async getAll() {
try {
let res = await axios.get("https://example.com/api", {
headers: {
'Authorization': this.__access_token
}
})
return res.data;
}
catch(error) {
return error;
}
}@hesammousavi
دوباره به مشکل خوردم :)
من یک فکری به ذهنم رسید. اومدم یک کلاس جدا ساختم برای ریکوست و یکی هم برای کار اصلیم. اما باز هم جواب نمیده :
const axios = require('axios');
class Request {
constructor() {}
async request(reqpath, data) {
try {
let res = await axios.post(`https://example.com/api/${reqpath}`, {
headers: {
'Authorization': this.__access_token
},
data
})
return res.data;
}
catch(error) {
return error;
}
}
}
class MyAPI {
constructor(access_token) {
super();
this.__access_token = access_token;
}
getAll() {
(async () => {
return await this.request("/test", {});
})
}
}
@hesammousavi
مرسی :)