异步函数返回[object Object]而不是值

时间:2019-06-02 22:28:40

标签: javascript object ecmascript-6 promise axios

在调用异步函数时,我期望它返回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]

2 个答案:

答案 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变量将返回频道名称!

相关问题