在调用异步函数时,我期望它返回JSON有效负载,以便可以从对象中提取值。但是,该函数仅返回[object Object]
异步函数在普通函数中被调用,因此我尝试将父函数更改为异步函数。这对我有帮助,因为最初我只得到[object Promise]
最初,我正在尝试:
const sendRequestToApprover = (userId, announcement, username) => {
const { title, details, channel } = announcement;
const channelName = channels.getChannelName(channel);
console.log('channelName' + channelName);
和getChannelName
如下:
async function getChannelName(id) {
try {
return await api.get('/channels.info', {
params: {
token: botToken,
channel: id,
}
});
} catch (err) {
console.log(err);
}
}
通过对[object Promise]
进行以下更改,我能够解决获得sendRequestToApprover
的问题:
async function sendRequestToApprover(userId, announcement, username) {
const { title, details, channel } = announcement;
const channelName = await channels.getChannelName(channel);
console.log('channelName' + channelName);
请注意,它现在是一个异步函数,我在函数调用中添加了await
。
我知道by调用的有效负载将返回以下内容:
{
"ok": true,
"channel": {
"id": "CJSFDR83T",
"name": "general",
...
}
在这种情况下,我无法弄清楚为什么我不能得到这个名字。我已经在其他功能中做到了这一点,这让我很困惑。 channelName
仍在返回[object Object]
。
答案 0 :(得分:2)
执行此操作时:
console.log("channelName" + channelName);
您正在toString
上调用channelName
方法,在对象上将导致[object Object]
。
console.log("Object.toString() -> " + { foo: "bar" });
您可以通过向console.log
传递另一个参数来避免这种情况。
console.log("Object.toString() -> ", { foo: "bar" });
答案 1 :(得分:0)
在本周末想出办法后,我感到非常失败。
我通过将API调用分配给变量并记录结果来解决这个问题。
try {
const result = await api.get('/channels.info', {
params: {
token: botToken,
channel: id,
}
});
然后我尝试记录result
并看到有效载荷!所以我将功能更新为:
async function getChannelName(id) {
try {
const result = await api.get('/channels.info', {
params: {
token: botToken,
channel: id,
}
});
return result.data.channel.name
} catch (err) {
console.log(err);
}
}
现在,我的channelName
变量将返回频道名称!